- 流程图
- 管理生命周期
- 实例运行, 验证流程
流程图
先附上一张官方提供的 Activity 流程生命周期图
管理生命周期
Activity 基本以三种状态存在- 继续
当前 Activity 处于可见状态, 并且能够响应用户的焦点事件。 在 onResume() ~ onPause() 之间运行 - 暂停
当前 Activity 处于可见状态, 但是无法响应用户的焦点事件。 例如,Activity 上覆盖了 AlertDialog, 有新的透明 Activity 处于 继续 状态,但是该 Activity 任然可见。此时的 Activity 仍然由系统保存着所有状态, 优先级较高, 只有内存严重不足时才会杀掉它。 (想想一年前一直在讲的QQ实现进程保活…)
在 onPause() ~ onStop() 之间 - 停止
意味着,当前 Activity 已经完全处于不可见状态, 已经压入 Activity 栈中。优先级较低, 内存不足时, 被系统杀死概率较大
在onStop() ~ onDestroy() 之间
函数 | 说明 |
---|---|
onCreate() | 首次创建 Activity 时被调用, 可进行系列初始化操作, 视图, 线程等。 |
onRestart() | 当 Activity 从停止状态重新恢复到继续状态前触发回调 |
onStart() | 在 Activity 即将对用户可见时调用 |
onResume() | 在 Activity 对用户可见时调用 |
onPause() | Activity 即将对用户不可见时进行回调, 可以在改函数中, 停止动画显示, 以及其他的一些界面上消耗CPU的事情 |
onStop() | Activity 即将处于暂停状态时的回调, 若处于该状态的 Activity 重新可见时, 则会调用上诉的 onRestart() |
onDestroy() | Activity 即将销毁时的回调 |
实例运行, 验证流程
新建 ActivityA.class , ActivityB.class
相同实现, onCreate(), onRestart(), onStart(), onResume(), onPause(), onStop(), onDestroy()
[ActivityB.class 与下面的代码相同, 打印的log改成了 ActivityB 而已]
public class ActivityA extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a_lay);
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);
}
});
Log.e("zxc", "AndroidActivity, ActivityA.class, onCreate()");
}
@Override
protected void onRestart() {
super.onRestart();
Log.e("zxc", "AndroidActivity, ActivityA.class, onRestart()");
}
@Override
protected void onStart() {
super.onStart();
Log.e("zxc", "AndroidActivity, ActivityA.class, onStart()");
}
@Override
protected void onResume() {
super.onResume();
Log.e("zxc", "AndroidActivity, ActivityA.class, onResume()");
}
@Override
protected void onPause() {
super.onPause();
Log.e("zxc", "AndroidActivity, ActivityA.class, onPause()");
}
@Override
protected void onStop() {
super.onStop();
Log.e("zxc", "AndroidActivity, ActivityA.class, onStop()");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("zxc", "AndroidActivity, ActivityA.class, onDestroy()");
}
}
当打开一个A时
AndroidActivity, ActivityA.class, onCreate()
AndroidActivity, ActivityA.class, onStart()
AndroidActivity, ActivityA.class, onResume()
这时打开一个B时
AndroidActivity, ActivityA.class, onPause()
AndroidActivity, ActivityB.class, onCreate()
AndroidActivity, ActivityB.class, onStart()
AndroidActivity, ActivityB.class, onResume()
AndroidActivity, ActivityA.class, onStop()
这时退出B
AndroidActivity, ActivityB.class, onPause()
AndroidActivity, ActivityA.class, onRestart()
AndroidActivity, ActivityA.class, onStart()
AndroidActivity, ActivityA.class, onResume()
AndroidActivity, ActivityB.class, onStop()
AndroidActivity, ActivityB.class, onDestroy()
这时退出A
AndroidActivity, ActivityA.class, onPause()
AndroidActivity, ActivityA.class, onStop()
AndroidActivity, ActivityA.class, onDestroy()