考虑到这种情况:如果我创建了一个活动并且它移动到后台并且这个活动包含一个Fragment
设置为setRetainInstance(true)
然后Android操作系统可能在某些时候仍然决定关闭活动的托管进程以释放内存。
然后Activity
's 的状态通过onSaveInstanceState(Bundle)
where - 据我了解 - 将相关Bundle
内容写入文件系统并保存到文件系统以在进程关闭后继续存在。(因此捆绑中的对象的要求是Serializable
)。稍后,应用程序状态可以通过onRestoreInstanceState(Bundle)
.
相反,Fragment
允许 my 包含不一定是Serializable
. 因此,我认为,Fragment
不能像现在这样存储在磁盘上Bundle
。那么当进程被杀死时我的片段会发生什么?
我想知道这个阅读开发人员指南(http://developer.android.com/guide/components/processes-and-threads.html):
持有用户当前不可见的活动的进程(已调用活动的 onStop() 方法)。这些进程对用户体验没有直接影响,系统可以随时杀死它们,为前台、可见或服务进程回收内存。通常有许多后台进程正在运行,因此它们被保存在 LRU(最近最少使用)列表中,以确保具有用户最近看到的活动的进程是最后被杀死的。如果一个活动正确地实现了它的生命周期方法,并保存了它的当前状态,杀死它的进程不会对用户体验产生明显的影响,因为当用户导航回活动时,活动恢复了它所有的可见状态。
我理解上面的杀戮使得VM实例被关闭并且进程的状态被写入文件系统(这里Bundle
开始发挥作用)。稍后读取捆绑包以恢复该过程。由于片段的保留与生命周期方法无关,并且由于我不知道如何保留例如指向网络连接的指针(无论如何,您当然不应该在片段中有这样的指针),我想知道片段是否如果在此期间关闭进程,它们仍然会恢复。我得出的结论是,它们肯定需要重新创建,因此应尽可能优先使用生命周期方法setRetainInstance(true)
。
这个假设有意义吗?