美文网首页
浅析onRestoreInstanceState调用时机

浅析onRestoreInstanceState调用时机

作者: FynnJason | 来源:发表于2018-12-12 19:52 被阅读83次
    @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            super.onRestoreInstanceState(savedInstanceState);
            Log.e("MainActivity", "onRestoreInstanceState: ");
        }
    

    onRestoreInstanceState只有在activity被系统回收,重新创建activity的情况下才会被调用。

    调用的例子

    比如上期文章提到的onSaveInstanceState的第5种情况横竖屏切换:
    onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume
    在这里onRestoreInstanceState被调用,是因为屏幕切换时原来的activity被系统回收了,又重新创建了一个新的activity。

    不会被调用的例子

    而按HOME键返回桌面,又马上点击应用图标回到原来页面时,activity生命周期如下:
    onPause -> onSaveInstanceState -> onStop -> onRestart -> onStart -> onResume
    因为activity没有被系统回收,因此onRestoreInstanceState没有被调用。

    如果onRestoreInstanceState被调用了,则页面必然被回收过,则onSaveInstanceState必然被调用过。

    解答疑问

    这里有人就要问,onCreate()里也有Bundle参数,可以用来恢复数据,它和onRestoreInstanceState有什么区别?

    因为onSaveInstanceState 不一定会被调用,所以onCreate()里的Bundle参数可能为空,如果使用onCreate()来恢复数据,一定要做非空判断。

    而onRestoreInstanceState的Bundle参数一定不会是空值,因为它只有在上次activity被回收了才会调用。

    而且onRestoreInstanceState是在onStart()之后被调用的。有时候我们需要onCreate()中做的一些初始化完成之后再恢复数据,用onRestoreInstanceState会比较方便。

    相关文章

      网友评论

          本文标题:浅析onRestoreInstanceState调用时机

          本文链接:https://www.haomeiwen.com/subject/hvnphqtx.html