Android-SavedInstanceState使用

10 Aug 2018

一般学习Android开发的开发者很容易忽略使用SavedInstanceState。
对于特殊情况,例如崩溃、后台回收,
SavedInstanceState的价值才会得到体现。
本文章这对SavedInstanceState进行测试,并总结使用方法。

测试项目:

https://github.com/pulque/SavedInstanceState

测试方式:

同通过打印Log来查看调用的方法。

测试流程:

3个页面,打开1、2、3页面,改变2页面数据,在第3个页面制造崩溃。
查看2页面信息是否保留。
可以点击Android Studio中Logcat里的结束进程按钮,结束APP。

测试结果:

进入页面会调用:
MainActivity +++onCreateView+++ savedInstanceState=NULL
MainFragment +++onCreateView+++ savedInstanceState=NULL
MainFragment +++onActivityCreated+++ savedInstanceState=NOT NULL
MainFragment +++onViewStateRestored+++ savedInstanceState=NOT NULL
离开页面会调用:
MainFragment +++onSaveInstanceState+++ savedInstanceState=NOT NULL
MainActivity +++onSaveInstanceState+++ savedInstanceState=NOT NULL
崩溃后会调用:
MainActivity +++onCreateView+++ savedInstanceState=NOT NULL
MainFragment +++onCreateView+++ savedInstanceState=NOT NULL
MainFragment +++onActivityCreated+++ savedInstanceState=NOT NULL
MainFragment +++onViewStateRestored+++ savedInstanceState=NOT NULL
MainActivity +++onRestoreInstanceState+++ savedInstanceState=NOT NULL

总结:

Bundle中只能存储简单变量,避免影响界面显示。
复杂数据存文件或数据库。
变量保存流程:
1.onSaveInstanceState保存数据
2.onCreateView读取数据,当savedInstanceState不为空时。