【发布时间】:2015-07-07 11:04:41
【问题描述】:
片段在其父 Activity 或 Fragment 重新创建时自动重新创建。 如果子片段与其父实例之间未保留的状态相关,我应该何时删除它们?
- 在父片段的
onDestroy()中:由于onDestroy()might not be called不可靠。 - 在父片段的
onCreate()中:大概此时还没有创建子片段。 - 保证在重新创建和添加子项后调用其他一些生命周期方法。
onViewStateRestored(...)合适吗?
如果我的问题不清楚,这里有一个例子:
Activity 有一个 Fragment,其中包含一个异步操作。该片段通常会在onDestroy() 中取消此任务。但是,如果片段在没有调用onDestroy() 的情况下被销毁,它可能稍后会发现自己在后台任务未初始化的情况下重新创建。在这种情况下,它应该删除其旧的进度对话框。 什么时候应该测试这种情况?
编辑:当用户从最近的应用中滑动应用时,它的所有组件都会被销毁,而无需调用onDestroy()。但在这种情况下,片段层次结构显然与应用程序的其余部分一起被删除了。当应用重新启动时,片段不会自动重新创建,所以我不必担心删除它。
当片段因为其宿主活动被置于后台而被销毁并且“不保留活动”被打开时,片段会自动重新创建。但在这种情况下,我似乎可以指望onDestroy() 被调用。
我担心的是当应用程序被杀死以释放内存时会发生什么。希望它会表现得像从最近刷卡一样,片段层次结构没有恢复。那将使我的整个问题变得毫无意义。谁能确认在这种情况下会发生什么?
【问题讨论】:
-
“销毁片段”是什么意思?当系统不再引用该片段时,该片段将被销毁。至于片段中的异步操作,可以在 onDestroy() 中取消。或者在 onStop() 中,这取决于应用程序的作用。
-
如果activity被销毁了,里面包含的fragment也是,并且fragment会在activity之前被销毁,所以在onStop()或者onDestroy()中停止进度
-
@Christine 我的意思是要么
Fragment#onDestroy()被调用,要么进程被杀死。 -
@Brian 这些方法可能永远不会被调用。
-
可能相关,但不同之处在于它涉及片段回栈:stackoverflow.com/questions/29525097/…