我要写一个小安卓应用程序。没什么复杂的,有 6 个“屏幕”。其中 4 个位于同一视图导航层次结构级别。2是这4个之一的子屏幕。
例如,屏幕 A 显示一个包含信息的列表。通过单击列表项,应用程序将显示屏幕 A1。屏幕 A1 显示有关先前选择的列表项的详细信息。所以屏幕 A1 是屏幕 A 的子屏幕。通过单击后退按钮,应用程序会显示屏幕 A。
屏幕 B 还有一个子屏幕,称为 B1。其他屏幕是 C 和 D,它们与 A 和 B(但不是 A1 和 B1)位于相同的视图导航层次结构中。所以 A、B、C 和 D 位于视图导航层次结构的顶部。该应用程序将从显示屏幕 A 开始。在操作栏中(或在滑动菜单中),您会找到跳转到屏幕 B、C 和 D 的按钮。
我希望你知道我想做什么。所以通常我会说,每个屏幕都是一个自己的活动。我是碎片的忠实粉丝,我通常在任何地方都使用它们。事实上,我发现自己实现了只包含一个片段的活动,该片段包含主视图布局。而且我可以说这样做绝对没有错(碎片带来了很大的优势......)
但是现在我想知道使用单个主要活动并仅更改此活动中的片段是否是一个好主意。所以屏幕A、B、C、D、A1、B1是Fragment而不是Activity。因此,通过从屏幕 A 导航到 CI,只需在主 Activity 中将片段 A 替换为片段 C(而不是启动包含片段 C 的新 Activity)。以同样的方式实现从屏幕 A 到子屏幕 A1 的导航。
到目前为止,我看不出这种方法有什么问题。在我看来,它类似于 ViewPager,只是无需滑动手势即可在屏幕之间导航。
我唯一不确定的(这就是我的问题)是内存管理。每当我进行替换片段事务(片段管理器)以从屏幕 A 导航到 B 时,片段 A 应该被销毁并且内存应该被垃圾收集(在未来的某个地方),对吗?什么时候实例化 Fragment B?当用户单击按钮导航到 B(并替换 A)时?这会带来性能问题(实例化片段的时间)吗?
如果我将所有片段 A、B、C、D、A1 和 B1 设置为 setRetainInstanceState(true) 会怎样?比每个屏幕的类成员字段都将保留在内存中,直到 MainActivity 完成,对吗?
你们中有人有这方面的经验吗?
ViewPage 使用某种“预加载”片段并仅加载下一个和上一个片段的视图布局(setOffscreenPageLimit())
你们认为我必须做类似的事情来避免内存和性能问题吗?