美文网首页
第一篇:Activity生命周期

第一篇:Activity生命周期

作者: Jayson_Jiang | 来源:发表于2019-11-29 11:11 被阅读0次

    基本介绍

    Activity是Android的四大组件之一。负责提供与用户可进行交互的屏幕,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。此组件是我们最常使用的组件,下面我们来介绍下其各生命周期方法的含义。

    生命周期

    方法
    onCreate() 当Activity第一次创建时调用。该方法(如果有)会提供给你一个包含之前活动的冻结状态信息bundle包。
    onStart() 该方法代表Activity正在被启动,此时Activity已经可见,但是此时Activity还未到前台,因此用户还无法看到,无法响应用户的交互动作
    onResume() 该方法表示Activity已经经过前面步骤创建完成,此时,Activity已经可见并且已经来前台,用户能够看到界面并且能够进行交互操作并获得响应。
    onPause() 该方法代表Activity准备暂停,此时,Activity虽然还是可见状态,但是已失去屏幕的焦点不能再与用户进行交互操作。如:我们在当前Activity弹出一个Dialog(注:此方法不易做耗时工作,会影响下一个Activity界面的打开)
    onStop() 该方法代表Activity准备停止。当前Activity已经不在前台展示,对于用户来说是不可见的。(注:此方法不易做耗时工作)
    onDestory() 当Activity被销毁时调用。此方法调用,代表Acvtivity已经被销毁,移除任务栈,生命周期已经结束。
    onRestart() 该方法代表Activity正在重新启动,一般情况下,在当前Activity从不可见重新变为可见的状态时onRestart就会被调用。这种情形一般是由于用户的行为所导致的,比如用户按下Home键切换到桌面或者打开了一个新的Activity(这时当前Activity会暂停,也就是onPause和onStop被执行),接着用户有回到了这个Activity,就会出现这种情况。
    activity_lifecycle.png

    Activity状态

    在Activity的运行期间总共包含四种工作状态,分别是Running、Paused、Stopped、killed。这四种状态涵盖了整个Activity的生命周期,具体如下图:

    page2.png

    系统进程与Activity状态之前关系

    系统终止进程的可能性 进程状态 Activity 状态
    前台进程(拥有或即将获得焦点) onCreate()、onStart()、onResume()
    后台进程(失去焦点) onPause()
    后台进程(不可见) onStop()
    空进程 onDestory()

    非正常情景下生命周期

    当 Activity因系统限制被销毁时,系统会调用 onSaveInstanceState() 方法,并将 Activity 中需要保存的数据(比如 View 状态 或者我们自己的数据)保存到这个方法的参数 Bundle 中。系统在用户需要时会对此Activity进行重新创建并恢复销毁前的状态,此时,会调用onCreate()和onRestoreInstanceState()俩个回调方法。我们可以通过回调方法的Bundle参数,来恢复我们之前保存的状态。

    onSaveInstanceState()示例:

    static final String STATE_SCORE = "playerScore";
    static final String STATE_LEVEL = "playerLevel";
    
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        // Save the user's current game state
        savedInstanceState.putInt(STATE_SCORE, currentScore);
        savedInstanceState.putInt(STATE_LEVEL, currentLevel);
    
        // Always call the superclass so it can save the view hierarchy state
        super.onSaveInstanceState(savedInstanceState);
    }
    

    onRestoreInstanceState()示例:

    public void onRestoreInstanceState(Bundle savedInstanceState) {
        // Always call the superclass so it can restore the view hierarchy
        super.onRestoreInstanceState(savedInstanceState);
    
        // Restore state members from saved instance
        currentScore = savedInstanceState.getInt(STATE_SCORE);
        currentLevel = savedInstanceState.getInt(STATE_LEVEL);
    }
    

    注意:

    1. 如果是用户自动按下返回键,或程序调用finish()退出程序,是不会触发onSaveInstanceState()和onRestoreInstanceState()的。
    2. 每次用户旋转屏幕时,当前Activity将被破坏并重新创建,此时会回调onSaveInstanceState()和onRestoreInstanceState()俩个方法
    3. onCreate()作为正常生命周期流程,bundle需要判null,而onRestoreInstanceState()方法被回调时bundle无需判断,一定不为null.

    相关文章

      网友评论

          本文标题:第一篇:Activity生命周期

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