美文网首页
Activity生命周期

Activity生命周期

作者: 京写 | 来源:发表于2020-08-06 09:14 被阅读0次
    Activity生命周期

    1.启动Activity A:onCreate——onStart——onResume,运行状态

    2.回到桌面或手机锁屏:onPause—onStop暂停运行

    3.由第二步在返回Activity A:onRestart—onStart—onResume

    4.Activity A跳转到Activity B:(A)onPause—B启动过程—(A)onStop,A停滞状态

    5.从B再回到A:(B)onPause—(A)onRestart—(A)onStart—(A)onResume—(B)onPause——(B)onStop-onDestroy,A运行状态

    6.当前Activity处于第2步和第4步,系统内存不足,杀死当前Activity,用户再退回此Activity:再次onCreate——onStart——onResume,运行状态

    7.用户退出当前Activity:onPause——onStop——onDestory,结束Activity。


    两个并不是生命周期的方法:onSaveInstanceStateonRestoreInstranceState方法

    总结如下:

    1、当应用遇到意外情况(如:内存不足)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。

    2、当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。

    通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

    \color{#FF0000}{onRestoreInstranceState}是之前意外销毁的Activity,再次返回到前台时,在onStart方法后会调用此方法来恢复之前onSaveInstanceState保存的bundle数据。

    示例代码:
    暂时存储

    static final String STATE_SCORE = "playerScore";
    static final String STATE_LEVEL = "playerLevel";
    ...
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        // 保存用户当前游戏状态
        savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
        savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
      
        // 通常调用父类,让他能保存View的信息。
        super.onSaveInstanceState(savedInstanceState);
    }
    

    获取并展示

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); // Always call the superclass first
       
        // 检查是否是一个前面销毁的activity实例。
        if (savedInstanceState != null) {
            // 恢复玩家状态
            mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
            mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
        } else {
            // 为新实例初始化一个默认值
        }
        ...
    }
    

    或者

    public void onRestoreInstanceState(Bundle savedInstanceState) {
        // 调用父类恢复默认的View的状态
        super.onRestoreInstanceState(savedInstanceState);
       
        // 恢复玩家状态
        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
    }
    

    相关文章

      网友评论

          本文标题:Activity生命周期

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