Android 状态信息的记录onPause和onSaveInstanceState

来源:互联网 发布:安卓装windows 编辑:程序博客网 时间:2024/05/22 05:26

 Android开发中,状态信息的记录可以在onPause和onSaveInstanceState中进行。

一、这两者的调用时机如下:

1.onPause在activity不可见时每次都会调用。

2.onSaveInstanceState不是每次都会调用,调用时机是:activity意外退出或者有意外退出的可能性,这样系统有可能之后需要帮助重建这个activity,因此调用这个函数把状态信息保留下来。

具体为以下几种(参考网上总结):

   (1)、当用户按下HOME键时。
    (2)、长按HOME键,选择运行其他的程序时。
    (3)、按下电源按键(关闭屏幕显示)时。
    (4)、从activity A中启动一个新的activity时。
    (5)、屏幕方向切换时,例如从竖屏切换到横屏时。

因此,当按返回键或调用finish方法退出时,是正常退出,系统之后不需要重建这个activity。即该activity再次创建时,是个崭新的,不需要记录之前的状态,因此不会调用这个函数。

注意:与onPause的调用顺序不一定,但是一定是在onStop之前调用。


       二、使用

1.onPause:一般用于正常跳转逻辑中,为开发者保存数据。我们可以在onPause中保存数据,在onResume中恢复数据。例如:查看列表详情,我们返回列表时需要记住列表的阅读位置。一般用于保存持久化数据,但不适合保存比较费时的数据。

2.onSaveInstanceState一般用于配置发生变化,为用户保存数据。例如:横竖屏切换。一般用于保存瞬态数据,如UI控件的状态, 成员变量的值等。

注意:①与onSaveInstanceState搭配使用的是onRestoreInstanceState方法,但是这个方法不是一定被调用,只有该activity确实被销毁了,重建时才会调用,在 onResume() 方法之前保存信息,该Bundle参数也会被传入onCreate中。

      ②关于默认的 super.onSaveInstanceState(outState) : 该默认的方法是实现 组件状态保存的;每个组件都 实现了 onSaveInstance() 方法, 在调用函数的时候, 会自动保存组件的状态, 注意, 只有有 id 的组件才会保存;如果需要保存其他数据,需要重写该方法。

0 0