【问题标题】:How much overhead is associated with an Android Fragment?与 Android 片段相关的开销有多少?
【发布时间】:2016-02-25 19:34:09
【问题描述】:

在 Android 领域,Fragment 了解 Android 生命周期,并且在重新创建 Activity 时不会被销毁。因此,我看到人们使用空片段来解决 Android 生命周期破坏对后台任务的引用的问题,并防止与保留对活动的引用相关的泄漏。

我想知道使用 Fragment 作为后台任务的挂钩会产生多少开销?我假设 Android 决定不销毁 Fragment,因为重新创建它们的成本很高(可能是错误的)。

奖金问题。有没有办法衡量这个成本? (也许实施替代方法并检查资源利用率)。

【问题讨论】:

    标签: java android performance android-fragments android-lifecycle


    【解决方案1】:

    您不应将“无头片段”用于后台工作。

    正确的方法是使用LoaderService(或Intent Service),具体取决于需要完成的工作的持续时间和类型。

    就开销而言,我认为没有太多。您可以使用这 4 种方法创建 4 个应用程序并根据需要对其进行分析,但更好的方法是选择一种适用于您要解决的问题的方法。

    【讨论】:

      【解决方案2】:

      不要不要使用Fragments 来保持任务的活力! 这样做弊大于利。

      如果您的任务运行时间足够长以至于您不得不担心它们是否会被杀死,请在 Service 中运行它们。

      这正是Service(或Loader)的用途。 Fragments 应该代表你布局的一部分,而不是无头使用。

      如果存在可行且预期的解决方案,则没有理由四处乱窜。

      【讨论】:

      • 在什么方面会造成更大的伤害?这些任务不适用于服务工作。我更喜欢使用装载机,但被告知要避免使用它们。
      • 您创建了一个不直观的结构,将来可能无法正常工作。其他程序员也很难理解你的代码。即使它现在可能有效,但将来可能会花费时间。此外,没有任何任务可以在 AsyncTask 中运行,但不能在服务中运行。
      • 我完全同意。我遇到了这种模式,并试图让我的同事说服我这不是一个肮脏的黑客。我还是不信哈哈。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2010-12-07
      • 2010-11-29
      • 2011-04-30
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多