猿问

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

我发现Fragment#setRetainInstance(true)令人困惑。这是从Android Developer API中提取的Javadoc :


public void setRetainInstance(布尔值保留)


控制是否在活动重新创建期间保留片段实例(例如,通过配置更改)。这只能与不在后堆栈中的片段一起使用。如果设置,则重新创建活动时片段的生命周期将略有不同:


onDestroy()将不会被调用(但onDetach()仍会被调用,因为该片段正在从其当前活动中分离出来)。

由于不会重新创建片段,因此不会调用onCreate(Bundle)。

onAttach(活动)和onActivityCreated(捆绑)将仍然被调用。

问题:作为开发人员,您如何使用它?为什么它使事情变得更容易?


哆啦的时光机
浏览 886回答 3
3回答

皈依舞

您作为开发人员如何使用此功能致电setRetainInstance(true)。我通常在onCreateView()或onActivityCreated()中使用它。为什么它使事情变得更容易?它往往比onRetainNonConfigurationInstance()处理跨配置更改的数据保留(例如,将设备从纵向旋转到横向)更简单。非保留的片段会在配置更改时被销毁并重新创建;保留的片段不是。因此,那些保留的片段保存的任何数据都可用于配置后更改活动。

潇潇雨雨

这对于保持套接字等长期运行的资源的开放非常有帮助。有一个没有UI的片段,其中包含对蓝牙套接字的引用,当用户翻转手机时,您不必担心重新连接它们。在保留对加载时间很长的资源(如位图或服务器数据)的引用时也很方便。加载一次,将其保留在保留的片段中,当重新加载活动时,它仍然存在,而您不必重建它。

白猪掌柜的

很晚才添加了此答案,但我认为这样可以使事情更清晰。跟我说。当setRetainInstance为:假片段在配置更改时重新创建。NEW INSTANCE已创建。在配置更改时将调用所有生命周期方法,包括onCreate()和onDestroy()。真正片段不会在配置更改时重新创建。使用相同的实例。在配置更改,APART FROM onCreate()和onDestroy()上调用所有生命周期方法。将实例添加到Backstack后,保留实例将不起作用。不要忘记,以上内容适用于DialogFragments和Fragments。
随时随地看视频慕课网APP

相关分类

Android
我要回答