跳转至

04 Activity 与生命周期

Activity 是安卓里"一个界面"的载体。理解它的生命周期,才知道代码该写在哪个回调里。

4.1 生命周期回调

系统会在 Activity 不同状态时调用以下方法(按发生顺序):

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // ① 创建:初始化界面、找控件、设监听(只走一次)
    }

    @Override
    protected void onStart() {
        super.onStart();
        // ② 即将可见
    }

    @Override
    protected void onResume() {
        super.onResume();
        // ③ 获得焦点、可交互(回到前台时会再次走)
    }

    @Override
    protected void onPause() {
        super.onPause();
        // ④ 失去焦点(来电话/跳页时触发)
    }

    @Override
    protected void onStop() {
        super.onStop();
        // ⑤ 完全不可见(切后台/进新页面)
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // ⑥ 被销毁(退出/系统回收)
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        // 从后台回到可见前调用
    }
}

完整旅程:onCreate → onStart → onResume(可见可交互) 切后台:onPause → onStop 回到前台:onRestart → onStart → onResume 退出:onPause → onStop → onDestroy

4.2 常见坑

场景 说明
屏幕旋转 Activity 会被销毁重建(onCreate 重走),临时数据会丢
界面状态保存 用 onSaveInstanceState(Bundle) 存,onCreate 的 savedInstanceState 取回
不要在 onPause 做耗时操作 系统等它返回再切走,卡顿影响体验

4.3 保存界面状态示例

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("input", etInput.getText().toString());
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState != null) {
        String saved = savedInstanceState.getString("input");
        if (saved != null) etInput.setText(saved);
    }
}

本章练习:在每个生命周期方法里加一行 Log.d("Life", "onXxx"),运行后切后台再回来,看 Logcat 输出顺序。

🏠 返回总站