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 输出顺序。