为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要使用Fragment#setRetainInstance(boolean)?

为什么要使用Fragment#setRetainInstance(boolean)?

哆啦的时光机 2019-09-21 11:29:52
我发现Fragment#setRetainInstance(true)令人困惑。这是从Android Developer API中提取的Javadoc :public void setRetainInstance(布尔值保留)控制是否在活动重新创建期间保留片段实例(例如,通过配置更改)。这只能与不在后堆栈中的片段一起使用。如果设置,则重新创建活动时片段的生命周期将略有不同:onDestroy()将不会被调用(但onDetach()仍会被调用,因为该片段正在从其当前活动中分离出来)。由于不会重新创建片段,因此不会调用onCreate(Bundle)。onAttach(活动)和onActivityCreated(捆绑)将仍然被调用。问题:作为开发人员,您如何使用它?为什么它使事情变得更容易?
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

您作为开发人员如何使用此功能

致电setRetainInstance(true)。我通常在onCreateView()onActivityCreated()中使用它。

为什么它使事情变得更容易?

它往往比onRetainNonConfigurationInstance()处理跨配置更改的数据保留(例如,将设备从纵向旋转到横向)更简单。非保留的片段会在配置更改时被销毁并重新创建;保留的片段不是。因此,那些保留的片段保存的任何数据都可用于配置后更改活动。


查看完整回答
反对 回复 2019-09-21
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

这对于保持套接字等长期运行的资源的开放非常有帮助。有一个没有UI的片段,其中包含对蓝牙套接字的引用,当用户翻转手机时,您不必担心重新连接它们。

在保留对加载时间很长的资源(如位图或服务器数据)的引用时也很方便。加载一次,将其保留在保留的片段中,当重新加载活动时,它仍然存在,而您不必重建它。


查看完整回答
反对 回复 2019-09-21
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

很晚才添加了此答案,但我认为这样可以使事情更清晰。跟我说。当setRetainInstance为:

  • 片段在配置更改时重新创建。NEW INSTANCE已创建。

  • 在配置更改时将调用所有生命周期方法,包括onCreate()和onDestroy()。

真正

  • 片段不会在配置更改时重新创建。使用相同的实例。

  • 在配置更改,APART FROM onCreate()和onDestroy()上调用所有生命周期方法。

  • 将实例添加到Backstack后,保留实例将不起作用。

不要忘记,以上内容适用于DialogFragments和Fragments。


查看完整回答
反对 回复 2019-09-21
  • 3 回答
  • 0 关注
  • 885 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信