【发布时间】:2016-08-24 09:04:35
【问题描述】:
在我的应用程序中,当用户从片段 1 转到片段 2 时,我有一个活动和 9 个片段始终被替换并保留在后台堆栈中,片段 1 的方法 onDestroyView 被调用并在那里我清理所有文件(我有一个很大的链表,里面有一些自定义对象)和其他对象,如果我将它们保存在内存中,则会抛出 OutOfMemory 异常。
我应该在哪里存储该列表?在数据库中?在共享偏好中(在这里我看到你需要做一些技巧才能使它成为可能)。 起初我想将它们存储在 onSaveInstanceState 方法提供的包中,但该方法永远不会被调用,因为它对于充当所有片段的“容器”容器的 Activity 来说是紧密的。
而且我认为与 OnSaveInstanceState 相关并不是 Fragment 内的一个好习惯(对于我需要的)。因此,在暂停时,我会清理所有字段,并且应该将它们存储在重新创建片段的位置和时间,并取回所有变量并在用户离开时创建视图。 (例如将位置保留在回收站视图中等等......)
我对此进行了很多搜索,但没有找到任何具体的答案。
所以说清楚一点,问题如下:
在 android 中保存 Fragments 状态的最佳做法是什么(来自回收站视图的位置 + 正在显示的对象列表 + 其他字段)?我应该使用存储所有字段或 SharedPreferences 的数据库吗?还是有其他我没有提到/找到的方法?
我主要关心的是 android 在这个主题和性能方面的最佳实践。
【问题讨论】:
-
如果你只想维护所有片段的状态而不是替换片段尝试
add和remove操作,状态将自动保留。您无需执行任何操作。 -
是的,但是这样做我会在某个时候得到 OutOfMemory 异常,这就是我试图避免的......
-
为此将您的数据保存在数据库中,如果适用,请尝试CursorAdapter,它非常适合从数据库中有效加载数据集,或者只需使用Loaders。
-
您也可以尝试在您的应用程序中设置
android:largeHeap="true"。虽然如果你能避免它不是最好的。
标签: android database performance android-fragments android-sqlite