gpt4 book ai didi

android - 选择什么 : activity or viewpager(with fragments)

转载 作者:太空狗 更新时间:2023-10-29 16:38:51 24 4
gpt4 key购买 nike

这两天脑子里有个问题找不到答案。现在我有一个 android 应用程序,我使用 1 个 fragment 和一个带有 3 个 fragment 的 View 寻呼机。我想知道的是,这两者之间有什么性能差异吗?与使用 Activity 相比,使用 fragment 是否会为我提供更少的成本?更改布局时对设备的 RAM/CPU 有什么好处;从一个 Activity 跳到另一个 Activity 或在 viewpager 的 fragment 之间跳过?因为如果我使用 Activity ,那么每次都会弹出一个窗口。但在 viewpager 的 fragment 中,我将留在一个 Activity 中,并且只会更改页面。这会为我提供设备性能还是只是一个 UI 问题?

提前致谢。

最佳答案

ViewPager 以这种方式工作:假设它有 n 个页面或 fragment 。如果您在索引 i 上,Android 将确保 fragment i-1i+1 及其 View 被实例化。当您从一侧翻到另一侧时,根据内存和“不保留 Activity ”设置,您将继续实例化 fragment ,直到所有 fragment 都出现在内存中。当你从一边到另一边时,Android 使用 OpenGL 将一个 fragment 的 View 平滑地滑到屏幕上,同时将另一个 fragment 滑出。

与其他一些答案相反,Android 在 ViewPager 启动时不会实例化所有 fragment - 实例化是惰性的。除了上述默认行为外,您还可以使用 setOffscreenPageLimit() 控制内存使用.

这是与仅在调用时实例化 Activity 的旧 Activity 堆栈模型的主要区别。

有几个后果:

  • 当 ViewPager 首次显示时,CPU 将更加活跃,因为它必须实例化正在显示的 Fragment 以及左右屏幕外的 fragment (等效工作的 2 倍或 3 倍)
  • 由于所有 fragment 都保留在内存中,内存使用会(略)高。如果您的 fragment 不使用太多内存,则内存使用量的差异是微不足道的。
  • 如果存在内存压力(或“不保留 Activity ”开启),则仅保留 2 或 3 个 Fragment;其他 fragment 已暂停,因此您需要确保正确实现 onSaveInstanceState()。当用户向后滑动时,Fragments 将恢复。但是,与创建等效的新 Activity 相比,恢复 Fragment 占用的 CPU 更少
  • 一旦 Fragment 被实例化,当用户从一侧滑动到另一侧时,CPU 使用率会降低并且(最重要的)用户体验会更加流畅,因为 View 已经存在并呈现在内存。
  • 使用父 Activity 作为通信中心,Fragment 之间的通信相对容易。

还有一点:ViewPager 的 UI 隐喻与 Activity 堆栈不同。在权衡采用哪种方法时,您可能应该更重视用户体验而不是实现细节(CPU 和内存),除非实现成本非常高。

关于android - 选择什么 : activity or viewpager(with fragments),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21466849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com