Activity,Fragment中onSaveInstanceState(Bundle outState)的调用时机

来源:互联网 发布:农业大数据应用 编辑:程序博客网 时间:2024/05/01 20:41

Activity,Fragment中onSaveInstanceState(Bundle outState)的调用时机


Activity 中 onSaveInstanceState(Bundle outState) 调用的时机(activity可能被销毁时调用此方法来保存瞬态数据)
1. home键最小化时,在onPause后调用
2. 长按home键,在onPause后调用
3. 屏幕旋转时,在onPause后调用
4. 开启新的Activity,在onPause后调用
5. 补充:Android UI框架中几乎所有的UI控件都实现了onSaveInstanceState()方法,因此当activity被摧毁和重建时, 这些UI控件会自动保存和恢复状态数据,前提是你已经为这个控件指定过ID

Frament 中 onSaveInstanceState(Bundle outState) 调用的时机
6. 列表内容 home键最小化时,在onPause后调用 长
7. 按home键,在onPause后调用 按下电源键,在onPause后调用
8. 托管该Fragment的Activity 旋转时,在onPause后调用
9. 托管该Fragment的Activity开启新的Activity时,在onPause后调用 补充:即使该Fragment在回退栈中,当前展示的不是它,上面几种情况也是成立的
10. 补充:此方法被调用时,如果向outState里添加了key-value对,那么在和onCreate(Bundle savedInstanceState)和onViewCreated(View view, @Nullable Bundle savedInstanceState)中拿到的bundle中会有存入的key-value对

Activity 中 onRestoreInstanceState(Bundle savedInstanceState) 调用的时机(activity“确实”被销毁后重建,调用此方法,Fragment中无此方法)
11. 验证的时候,只有屏幕旋转后调用了此方法,在onStart()之后
12. onRestoreInstanceState()被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用。上面验证实验的其它4种情况Activity一般不会那么快被销毁,所以没有调用此方法
13. 关于屏幕旋转保存数据的补充:

  1. Object onRetainCustomNonConfigurationInstance()旋转时会调用此方法,在onStop()后调用,可以重写此方法返回一个对象(Fragment中无此方法)
  2. Activity重建后可以在onCreate方法中通过getLastCustomNonConfigurationInstance()拿到上边保存的对象(Fragment中无此方法)
  3. AndroidManifest.xml中设置android:configChanges=”orientation|screenSize”后,旋转屏幕将不会重新调用各个生命周期,当然也不会调用保存数据的方法,只会调用onConfigurationChanged(Configuration newConfig)方法

Fragment 中 setRetainInstance方法介绍
17. Fragment还可以通过setRetainInstance(boolean)来保存自定义的对象数据(Fragment中都有此方法,Activity中无此方法), 当在Fragment的onCreate()方法中调用了setRetainInstance(true)后,Activity被系统销毁又重新创建时(如屏幕旋转),可以不完全销毁Fragment,Fragment中的成员变量值会保留,恢复时跳过了onDestroy()和onCreate()

0 0