Android 四大组件基础 Activity 生命周期

Android 四大组件中让我们产生最直观的感受的,还是 Activity。因为其重要性,网上已经有太多的例子,这里作此记录以加深印象。
首先我们看谷歌官方给定的一张生命周期图片:

一般情况下, Activity 经历的完整的生命周期为:
onCreate → onStart → onResume → onPause → onStop → onDestory

其中对于用户可见的部分为 onStart 调用之后, onStop 调用之前,其它时刻用户不可见。

其中用户可操作的部分为 onResume 调用之后, onPause 调用之前,其它时候用户不可操作。

一般情况下 onStart/onStop 对 与 onResume/onPause 对可以混用,但如果用户启动的一个新的 activity 是一个透明的 activity 或者并不能完全覆盖当前 activity 时, 当前 activity 不会调用 onStop, 当新的 activity 结束时, 本 activity 不会调用 onStart, 这里需要根据具体情况在不同的地方做相应处理。
根据上述内容,以及流程图,可以很清晰地看出单个 activity 是如何工作的,但是每个应用都不可能只有一个 activity, 每个应用又是如何去处理这些 activities 的呢?

那么再看一下多个 activity 是如何启动的。
在这里,我们封装一个简单的 BaseActivity:

public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener{

    private static List activityList = new ArrayList<>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getInfoView());
        activityList.add(this);
        log("onCreate");
        log("activities: " + activityList.toString());
    }

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

    @Override
    protected void onResume() {
        super.onResume();
        log("onResume");
    }

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

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

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

    @Override
    protected void onDestroy() {
        super.onDestroy();
        activityList.remove(this);
        log("onDestroy");
        log("activities: " + activityList.toString());
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        log("onSaveInstanceState");
    }

    private View getInfoView(){
        TextView textView = new TextView(this);
        textView.setText(this.getClass().getName());
        textView.setGravity(Gravity.CENTER);
        textView.setOnClickListener(this);
        return textView;
    }

    public void log(@NonNull String msg){
        Log.e(this.getClass().getSimpleName(), msg);
    }

}

让 MainActivity, 以及 SecondActivity 继承 BaseActivity

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onClick(View v) {
        super.log("Click");
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }
}
public class SecondActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onClick(View v) {
        super.log("Click");
        finish();
    }
}

启动 MainActivity 后单击 TextView 启动 SecondActivity 之后 再单击 TextView 后,产生了下面的一系列的日志:
Android 四大组件基础 Activity 生命周期_第1张图片
可以看到,在 MainActivity 时 click 后,首先 MainActivity 运行 Pause, 然后开始 SecondActivity 的 create start resume 过程,当 SecondActivity Resume 之后 MainActivity 就不可见了,这时候 MainActivity 对应 Stop 了。
而在 SecondActivity 中单击 stop 之后 SecondActivity 首先 pause 然后让 MainActivity 显示出来,然后继续执行 SecondActivity 的销毁流程。

在不对 ams 进行深入分析的情况下,以上便是此次记录全部内容了。

你可能感兴趣的:(android,四大组件)