Android开发中,状态信息的记录可以在onPause和onSaveInstanceState中进行。
一、这两者的调用时机如下:
1.onPause在activity不可见时每次都会调用。
2.onSaveInstanceState不是每次都会调用,调用时机是:activity意外退出或者有意外退出的可能性,这样系统有可能之后需要帮助重建这个activity,因此调用这个函数把状态信息保留下来。
具体为以下几种(参考网上总结):
因此,当按返回键或调用finish方法退出时,是正常退出,系统之后不需要重建这个activity。即该activity再次创建时,是个崭新的,不需要记录之前的状态,因此不会调用这个函数。
注意:与onPause的调用顺序不一定,但是一定是在onStop之前调用。
二、使用
1.onPause:一般用于正常跳转逻辑中,为开发者保存数据。我们可以在onPause中保存数据,在onResume中恢复数据。例如:查看列表详情,我们返回列表时需要记住列表的阅读位置。一般用于保存持久化数据,但不适合保存比较费时的数据。
2.onSaveInstanceState一般用于配置发生变化,为用户保存数据。例如:横竖屏切换。一般用于保存瞬态数据,如UI控件的状态, 成员变量的值等。
注意:①与onSaveInstanceState搭配使用的是onRestoreInstanceState方法,但是这个方法不是一定被调用,只有该activity确实被销毁了,重建时才会调用,在 onResume() 方法之前保存信息,该Bundle参数也会被传入onCreate中。
②关于默认的 super.onSaveInstanceState(outState) : 该默认的方法是实现 组件状态保存的;每个组件都 实现了 onSaveInstance() 方法, 在调用函数的时候, 会自动保存组件的状态, 注意, 只有有 id 的组件才会保存;如果需要保存其他数据,需要重写该方法。