首先,检查出我的岗位上保留碎片。这可能会有所帮助。
现在回答您的问题:
片段是否还保留其视图状态,还是会在配置更改时重新创建该视图状态-“保留”的确切含义是什么?
是的,Fragment
的状态将在配置更改中保留。具体来说,“保留”是指片段不会在配置更改时被破坏。也就是说,即使配置更改导致基础结构被破坏,Fragment
也将保留Activity
。
用户离开活动时,碎片会被破坏吗?
就像Activity
s 一样,Fragment
当内存资源不足时,s可能会被系统破坏。是否让片段在配置更改期间保留其实例状态,将对Fragment
离开s后系统是否销毁s 没有影响Activity
。如果离开Activity
(即按home键),则Fragment
S可以或可以不被破坏。如果Activity
通过按“后退”按钮离开,(因此,调用finish()
并有效销毁Activity
),则所有Activity
连接的Fragment
s也将被销毁。
为什么它对后堆栈上的片段不起作用?
为什么不支持它可能有多种原因,但是对我来说,最明显的原因是,该方法Activity
持有对的引用FragmentManager
,并FragmentManager
管理后退堆栈。也就是说,无论您选择保留Fragment
还是不保留,配置更改都会破坏Activity
(并因此而导致FragmentManager
的堆栈)。之所以不起作用的另一个原因是,如果允许保留的碎片和未保留的碎片都被允许存在于同一backstack中,那么事情可能会变得棘手。
在哪些使用案例中使用此方法有意义?
保留的片段对于在活动实例之间传播状态信息(尤其是线程管理)非常有用。例如,一个片段可以充当Thread
或实例的主机,以AsyncTask
管理其操作。有关更多信息,请参阅我的博客文章。
总的来说,我会把它当作onConfigurationChanged
和Activity
...一样使用。不要仅仅因为你太懒而无法正确实现/处理方向改变,就把它当作创可贴。仅在需要时使用它。