【问题标题】:When to remove fragments displaying un-retained state?何时删除显示未保留状态的片段?
【发布时间】:2015-07-07 11:04:41
【问题描述】:

片段在其父 ActivityFragment 重新创建时自动重新创建。 如果子片段与其父实例之间未保留的状态相关,我应该何时删除它们?

如果我的问题不清楚,这里有一个例子:

Activity 有一个 Fragment,其中包含一个异步操作。该片段通常会在onDestroy() 中取消此任务。但是,如果片段在没有调用onDestroy() 的情况下被销毁,它可能稍后会发现自己在后台任务未初始化的情况下重新创建。在这种情况下,它应该删除其旧的进度对话框。 什么时候应该测试这种情况?

编辑:当用户从最近的应用中滑动应用时,它的所有组件都会被销毁,而无需调用onDestroy()。但在这种情况下,片段层次结构显然与应用程序的其余部分一起被删除了。当应用重新启动时,片段不会自动重新创建,所以我不必担心删除它。

当片段因为其宿主活动被置于后台而被销毁并且“不保留活动”被打开时,片段会自动重新创建。但在这种情况下,我似乎可以指望onDestroy() 被调用。

我担心的是当应用程序被杀死以释放内存时会发生什么。希望它会表现得像从最近刷卡一样,片段层次结构没有恢复。那将使我的整个问题变得毫无意义。谁能确认在这种情况下会发生什么?

【问题讨论】:

  • “销毁片段”是什么意思?当系统不再引用该片段时,该片段将被销毁。至于片段中的异步操作,可以在 onDestroy() 中取消。或者在 onStop() 中,这取决于应用程序的作用。
  • 如果activity被销毁了,里面包含的fragment也是,并且fragment会在activity之前被销毁,所以在onStop()或者onDestroy()中停止进度
  • @Christine 我的意思是要么Fragment#onDestroy() 被调用,要么进程被杀死。
  • @Brian 这些方法可能永远不会被调用。
  • 可能相关,但不同之处在于它涉及片段回栈:stackoverflow.com/questions/29525097/…

标签: android android-fragments


【解决方案1】:

文档似乎表明将始终调用 onpause https://developer.android.com/guide/components/fragments.html

或者如果您知道活动将被销毁,则必须调用 onDetach(),因为如果活动被销毁,则无法附加片段。

【讨论】:

  • onPause() 在配置更改期间在保留的片段上调用,因此我不想在那里停止后台任务。并且可以在不调用任何内容的情况下销毁 Activity(实际上是整个应用程序)。
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多