【问题标题】:Creating a common header for an android app为 android 应用程序创建一个公共标头
【发布时间】:2011-03-11 05:47:43
【问题描述】:

我希望为 android 活动创建一个通用标头,并有 3 种可能的方法来解决该问题。我想知道在性能和内存使用方面哪个是最佳解决方案。

  1. 在所有 XML 布局中复制 XML:我相信这是使用大量内存的最不令人印象深刻的解决方案

  2. 创建一个自定义 HeaderView ,然后我可以在需要的地方使用它。缺点:它仍然会创建很多实例。

  3. 使用 <include > 包含 XML 组件,不确定它如何提高性能并减少内存使用量。

那么哪种方法最好,或者有更好的方法吗?

【问题讨论】:

标签: android performance header memory-management


【解决方案1】:

我认为你担心的是错误的事情。选择最适合您的项目的开发或可维护性。请记住,视图都是 ONE 活动的一部分,根据 Android 活动生命周期,用户可以随时看到。如果需要垃圾收集,框架有责任清理不可见的活动。如果您担心视图性能,请考虑使用 SDK 附带的 Hierarchy Viewer 来扁平化您的视图。

【讨论】:

    【解决方案2】:

    第三种方式看起来是一个不错的选择......所有方式之间的性能差异并不大。另一方面,它的可维护性差异。因此,第三个选项提供了一个更简洁的解决方案,因为您没有样板代码,并且允许您将来轻松更改标题,而无需修改其他视图。

    第二种解决方案很好,但它引入了不必要的复杂性。您是否要在该标题中使用三个以上的活动?你打算分享HeaderView 还是在其他项目中重用它?如果没有……那就不值得了。更糟糕的是,它会让你编写 Java 代码,这比几行 XML 更难维护。

    【讨论】:

    • include标签的内存使用情况如何,Android是否为每个include添加一个实例?
    • @Ravi 由于 XML 布局是经过预处理的,我认为它们是创建布局的更好选择。第 1 和第 3 选项是最好的,但由于第 3 选项更易于维护。我会选择第三个。
    【解决方案3】:

    在我看来,我会选择第三个,虽然它在内存方面没有什么区别,但它会使代码更干净,至少对于 xml。我可能错了,但这只是我的看法

    【讨论】:

      【解决方案4】:

      我最终使用第 2 步并在 onPause 中将我的标头对象设置为 null 并在 onResume 中将其重置,这样垃圾收集器就可以释放资源。谢谢@Morrison Chang :-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-05
        • 1970-01-01
        • 2016-12-24
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        相关资源
        最近更新 更多