首先,查看我关于保留片段的帖子。它可能会有所帮助。
现在回答你的问题:
片段是否还保留其视图状态,或者会在配置更改时重新创建 - 究竟什么是“保留”?
是的,Fragment的状态将在配置更改期间保留。具体来说,“保留”意味着片段不会在配置更改时被销毁。也就是说,即使配置更改导致底层被破坏,Fragment也会保留。Activity
当用户离开activity时,fragment会被销毁吗?
就像Activitys一样,Fragments可能会在内存资源不足的时候被系统销毁。无论您是否让您的片段在配置更改中保留其实例状态,都不会影响系统是否会在Fragment您离开Activity. 如果您离开Activity(即按主页按钮),Fragments 可能会或可能不会被破坏。如果您Activity通过按后退按钮离开 (因此,调用finish()并有效地销毁Activity),所有Activity附加Fragment的 s 也将被销毁。
为什么它不适用于后堆栈上的片段?
不支持它可能有多种原因,但对我来说最明显的原因是Activity持有对 的引用FragmentManager,并且FragmentManager管理后台堆栈。也就是说,无论您是否选择保留您Fragment的 s ,Activity(以及因此FragmentManager的 后堆栈)都将在配置更改时被销毁。它可能不起作用的另一个原因是,如果允许保留片段和非保留片段都存在于同一个 backstack 上,事情可能会变得棘手。
在哪些用例中使用此方法有意义?
保留的片段对于跨活动实例传播状态信息(尤其是线程管理)非常有用。例如,片段可以作为Thread或的实例的主机AsyncTask,管理其操作。有关更多信息,请参阅我关于此主题的博客文章。
一般来说,我会将它onConfigurationChanged与使用Activity...类似地对待它,不要仅仅因为您太懒而无法正确实现/处理方向更改而将其用作创可贴。仅在需要时使用它。