Håv*_*hus 64 android android-lifecycle android-fragments
我发现Fragment #setRetainInstance(true)令人困惑.这是从Android Developer API中提取的Javadoc :
public void setRetainInstance(boolean retain)
控制是否在活动重新创建(例如从配置更改)中保留片段实例.这只能用于不在后栈中的片段.如果设置,则在重新创建活动时,片段生命周期会略有不同:
- onDestroy()不会被调用(但是onDetach()仍然会被调用,因为片段正在与其当前活动分离.
- 因为片段没有被重新创建,所以不会调用onCreate(Bundle).
- onAttach(活动)和onActivityCreated(捆绑)将仍然被调用.
问题:作为开发人员,您如何使用它,为什么它会使事情变得更容易?
Com*_*are 83
作为开发人员,您如何使用它
打电话setRetainInstance(true)
.我通常在onCreateView()
或onActivityCreated()
使用它的地方.
为什么它会让事情变得更容易?
它往往比onRetainNonConfigurationInstance()
处理跨配置更改的数据保留(例如,将设备从纵向旋转到横向)更简单.在配置更改时销毁并重新创建未保留的片段; 保留的片段不是.因此,这些保留的片段保存的任何数据都可用于配置后更改活动.
Dee*_*eeV 47
这对于保持长时间运行的资源(如套接字)非常有用.拥有一个无UI片段,可以保存对蓝牙套接字的引用,当用户翻转手机时,您不必担心重新连接它们.
它还可以方便地保留对需要很长时间才能加载的资源(如位图或服务器数据)的引用.加载一次,将其保留在保留的片段中,当重新加载活动时,它仍然存在,您不必重建它.
Eur*_*nes 29
很晚才添加这个答案,但我认为这会让事情更加清晰.跟我说吧.当setRetainInstance是:
假
真正
不要忘记以上内容适用于DialogFragments以及Fragments.
从fragment API 1.3.0版开始,Fragments 上的方法setRetainInstance(boolean)
已被弃用。
随着ViewModel的引入,开发人员可以使用特定的 API 来保留与“活动”、“片段”和“导航图”相关联的状态。这允许开发人员使用普通的、不保留的 Fragment 并将他们想要保留的特定状态分开。
这确保了开发人员对这些片段有一个更容易理解的生命周期(与所有其余片段相匹配的生命周期),同时保持单个创建和单个销毁的有用属性(在本例中,是 的构造函数和来自的ViewModel
回调onCleared()
)这ViewModel
)。
归档时间: |
|
查看次数: |
46110 次 |
最近记录: |