zoukankan      html  css  js  c++  java
  • Activity中的onSaveInstanceState和onRestoreInstanceState

    onSaveInstanceState:保存当前焦点实例状态

    onRestoreInstanceState:还原保存的实例状态

    本文主要是记录一下onSaveInstanceState和onRestoreInstanceState的运行时间和作用,博主刚写到这个,各种研究后总结了一下,下面做一下简要的说明:

    onSaveInstanceState什么时候被执行:

    这个方法主要在“未经用户允许”的情况,activity的生命周期状态为暂停或停止的情况下会使用,下面举几个例子说明:

    1. 当在Activity-A中打开一个Activity-B(不管B是否完全覆盖A的界面)的时候,会使用该方法,因为你点击了A上的打开B按钮,并没有允许A退出。未经用户允许
    2. 当翻转屏幕的时候,程序会执行onPause->onStop->onDestroy->onCreate->onStart->onResume的操作,未经用户允许进行了onStop的销毁操作
    3. 当直接按了home键,直接跳出程序的时候,也是未经用户运行执行了onStop操作

    目前就想到以上这三种情况,总而言之,只要是未经过用户允许,程序自动运行onPause或onStop操作的情况就会执行onSaveInstanceState方法。该方法运行在onStop方法之前,当不保证是在onPause之前还是之后。

    什么是经用户运行呢?比如你自己按了退出(返回)按钮,这就是用户允许

    onSaveInstanceState的作用:

    保存当前所有实例的状态,即当程序未经用户允许的情况下被退出时,以便还原各实例的当前运行状态而进行的保存操作。

    onRestoreInstanceState什么时候被执行:

    1. 各实例状态被onSaveInstanceState方法保存
    2. 程序被停止并重新初始化,即重新调用了onStop和onCreate方法

    满足以上两个条件就会调用onRestoreInstanceState,下面举两个例子:

    1. 翻转屏幕的时候,保存了state,并重新初始化,满足以上两个条件
    2. 按了home键,程序被onStop,保存了state,并因为其他程序的资源抢占,导致该进程被杀死,重新启动该程序(onCreate)的时候会执行该方法

    下面再说一个onRestoreInstanceState的特殊案例:当通过activity-A打开一个使A处于暂停状态的activity-B时,这时候会调用onSaveInstanceState方法,这时候直接杀死A的进程的话,A会自动还原数据并重启,再杀死的话继续这样的操作,连续3次之后若再被杀死,则A不再重启,只有背景是黑色的B了。

    onRestoreInstanceState方法与onSaveInstanceState并不是成对出现的。而且这两个方法记录实例状态的时候是通过R资源文件中的id来记录的。

    【以上纯属个人研究所得,若有错误,欢迎交流指正,谢谢!】

  • 相关阅读:
    mac 10.15.7 修改PATH
    oc 属性类型一般用法
    ubuntu解压zip文件名乱码
    telnet 退出
    docker 根据容器创建镜像
    mac android adb device 没有显示设备
    Yii2 查看所有的别名 alias
    Yii2 App Advanced 添加 .gitignore
    ubuntu 18.04 搜狗突然就提示乱码
    An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to
  • 原文地址:https://www.cnblogs.com/joinrudy/p/3464549.html
Copyright © 2011-2022 走看看