Ixx*_*Ixx 328 android android-fragments
从文档开始:
public void setRetainInstance(boolean retain)
控制是否在活动重新创建(例如从配置更改)中保留片段实例.这只能用于不在后栈中的片段.如果设置,则在重新创建活动时,片段生命周期会略有不同:
- onDestroy()不会被调用(但是onDetach()仍然会被调用,因为片段正在与其当前活动分离.
- 因为片段没有被重新创建,所以不会调用onCreate(Bundle).
- onAttach(Activity)和onActivityCreated(Bundle)仍将被调用.
我有一些问题:
片段是否也保留其视图,还是会在配置更改时重新创建?"保留"究竟是什么意思?
当用户离开活动时,片段是否会被销毁?
为什么它不适用于后端堆栈上的碎片?
哪个是使用此方法有意义的用例?
Ale*_*ood 332
现在回答你的问题:
片段是否也保留其
视图状态,或者是否会在配置更改时重新创建 - 究竟是什么"保留"?
是的,Fragment状态将在整个配置更改中保留.具体而言,"保留"意味着在配置更改时不会破坏该片段.也就是说,即使配置更改导致底层被破坏,Fragment也将保留Activity.
当用户离开活动时,片段是否会被销毁?
就像Activitys 一样,Fragment当内存资源不足时,系统可能会破坏s.无论您的片段是否在配置更改中保留其实例状态,都不会影响系统是否会在Fragment您离开后破坏s Activity.如果你离开Activity(即通过按下主页按钮),Fragments可能会或可能不会被销毁.如果你Activity按下后退按钮(因此,调用finish()并有效地摧毁它Activity),所有Activity附加的Fragments也将被销毁.
为什么它不适用于后端堆栈上的碎片?
可能有多种原因导致它不被支持,但对我来说最明显的原因是它Activity拥有对thestack 的引用FragmentManager,并且FragmentManager管理backstack.也就是说,无论你是否选择保留你的Fragments,都会在配置改变时销毁Activity(因而FragmentManager背板).它可能不起作用的另一个原因是因为如果允许保留的片段和非保留的片段都存在于同一个后台上,事情可能会变得棘手.
哪个是使用此方法有意义的用例?
保留的片段对于跨活动实例传播状态信息(尤其是线程管理)非常有用.例如,一个片段可以作为实例的主机Thread或AsyncTask,管理其操作.有关详细信息,请参阅我关于此主题的博客文章.
一般情况下,我会把它当作onConfigurationChanged与Activity...一样使用它不要仅仅因为你太懒而无法正确实现/处理方向更改.只在需要时使用.
sui*_*shi 27
setRetaininstance仅在activity因配置更改而销毁和重新创建因为实例在调用期间保存时才有用onRetainNonConfigurationInstance.也就是说,如果您旋转设备,保留的片段将保留在那里(它们不会被销毁并重新创建.)但是当运行时杀死活动以回收资源时,不会留下任何内容.当您按下后退按钮并退出活动时,一切都将被销毁.
通常我使用这个功能来保存方向更改Time.Say我从服务器下载了一堆Bitmaps,每个都是1MB,当用户不小心旋转他的设备时,我当然不想再做所有的下载工作了.所以我创建一个Fragment握住我的位图并将其添加到管理器并调用setRetainInstance,即使屏幕方向改变,所有位图仍然存在.
小智 12
SetRetainInstance(true)允许片段生存.其成员将在配置更改期间保留,如轮换.但是当活动在后台被杀死时它仍然可能被杀死.如果后台中的包含活动被系统杀死,那么它的instanceState应该由您在onSaveInstanceState上正确处理的系统保存.换句话说,将始终调用onSaveInstanceState.虽然如果SetRetainInstance为true且片段/活动尚未被杀死,则不会调用onCreateView,但如果它被杀死并被试图被带回,它仍然会被调用.
以下是对android活动/片段的一些分析希望它有所帮助. http://ideaventure.blogspot.com.au/2014/01/android-activityfragment-life-cycle.html
作为片段版本 1.3.0-alpha01
Fragments 上的 setRetainInstance() 方法已被弃用。随着 ViewModel 的引入,开发人员拥有一个特定的 API 来保留可以与活动、片段和导航图相关联的状态。这允许开发人员使用一个正常的、不保留的 Fragment 并将他们想要保留的特定状态分开,避免常见的泄漏源,同时保持单个创建和销毁保留状态(即 ViewModel 的构造函数)的有用属性以及它接收的 onCleared() 回调)。
| 归档时间: |
|
| 查看次数: |
155700 次 |
| 最近记录: |