• 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来记录的。

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

  • 相关阅读:
    机器学习之线性回归
    机器学*-K*邻算法模型预测实战
    机器学习-特征抽取
    机器学习sklearn和字典特征抽取
    机器学习第一讲
    spark统计每个省份广告点击量top3
    spark统计单位时间内访问量
    并发容器之 ConcurrentHashMap源码剖析
    并发之 Java中的锁
    并发之 深入剖析volatile底层原理
  • 原文地址:https://www.cnblogs.com/joinrudy/p/3464549.html
Copyright © 2020-2023  润新知