Activity的相关基础知识的话整理在下面的博文了:

https://blog.csdn.net/nishigesb123/article/details/88875292

不过官方的这张流程图还是再贴一下


onCreate

Activity创建时第一个调用的方法,通常不需要书写,创建一个Activity的时候IDE会帮我们自动生成。就是我们经常能看到的如下片段。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

通常,在该方法中我们完成一些初始化操作:

  1. 加载布局文件
  2. 初始化UI组件
  3. 事件注册(绑定事件)

 这个方法有两个参数,Bundle和PersistableBundle。

  • Bundle,首先需要明确,它是用来传递数据的,其次,它是在两个Activity之间传递数据的。在一个Activity生命周期结束前,通过onSaveInstanceState()捕获状态,可以将状态保存到Bundle。即Bundle包含了 Activity 的上一状态。
  • PersistableBundle,这个没怎么见到过,查了一下说是API21以后的新属性,可以将Activity数据持久化保存。具体内容可以参考下面的链接 https://www.jianshu.com/p/a044e20fd6e7 

该方法后接onStart()


onStart

插一个AS的快捷键:ctrl+o  以选择父类的方法进行重写 

在onCreate之后,用于显示界面,但用于还不能进行交互。

    @Override
    protected void onStart() {
        super.onStart();
    }

如果 Activity 转入前台,则后接 onResume,如果 Activity 转入隐藏状态,则后接 onStop。


onResume

插一个AS的快捷键:ctrl+o  以选择父类的方法进行重写 

在onStart之后,该方法执行后,用户将被允许进行交互。 此时,Activity 处于栈顶,并具有用户输入焦点。

当前Activity进入第一个状态——resumed状态

    @Override
    protected void onStart() {
        super.onStart();
    }

后接onPause()


onPause

当其他Activity(透明或窗口模式)进入时,该方法会被调用。当前Activity依然可见,但是不可进行交互。

API描述:当系统即将开始继续另一个 Activity 时调用。 此方法通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。 它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行。

当前Activity进入第二个状态——paused状态

    @Override
    protected void onPause() {
        super.onPause();
    }

如果 Activity 返回前台,则后接onResume() ,如果 Activity 转入对用户不可见状态(遇到其他更高优先级的Activity需要内存的情况下,可能会销毁该Activity来满足内存需求),则后接onStop() 。


onStop

当其他Activity完全覆盖当前Activity,该方法会被调用。当前Activity将不可见。

API描述:在 Activity 对用户不再可见时调用。如果 Activity 被销毁,或另一个 Activity(一个现有 Activity 或新 Activity)继续执行并将其覆盖,就可能发生这种情况。

当前Activity进入第三个状态——stoped状态

    @Override
    protected void onStop() {
        super.onStop();
    }

如果 Activity 恢复与用户的交互,则后接onRestart(),如果 Activity 被销毁(同样是遇到其他更高优先级的Activity需要内存的情况下,可能会销毁该Activity来满足内存需求),则后接onDestroy()。


onRestart

当一个处于stoped状态的Activity被返回时调用

    @Override
    protected void onRestart() {
        super.onRestart();
    }

后接onStart()


onDestroy

当前Activity被销毁时调用,在该方法中对资源进行释放,销毁当前Activity

API上的Tips:当 Activity 结束(有人对 Activity 调用了finish()),或系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。 您可以通过isFinishing()方法区分这两种情形。

    @Override
    protected void onRestart() {
        super.onRestart();
    }

小测试

我们将通过如下简单的代码进行测试

package com.example.a3_28activity;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("Creat");
    }

    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("Start");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("Restart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("Resume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("Pause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("Stop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("Destroy");
    }

}

首先 启动项目 可以看到onCreate、onStart和onResum被调用,且onResum在最后,次于onStart之后,onCreate最先。

然后我们按home键回到桌面,发现又调用了两个方法onPause和onStop,onPause先于onStop

最后我们关掉进程,可以看到onDestroy进程被调用,一个Activty的生命周期也就到此为止。