刚开始学习,后面还会继续补充,生命周期其实时安卓很复杂的一部分,大家看到有什么不对的地方希望评论区指出
先来一张Activity的生命周期图,一共7个阶段
- onCreate()
所有的Activity必须要实现这个回调,并且必须要在onCreate()中使用setContentView()方法定义Activity的用户界面,onCreate()执行结束下一步一定是onStart() - onStart()
这一步对用户可见,是一个Activity展现在用户面前的所有准备工作 - onResume()
这一步Activity已经在栈顶了,用户界面已经加载出来,可以接受用户的输入,app大部分的核心操作在这一步,它的下一步永远是onPause() - onPause()
这一步一般是用户点了back按钮或者显示桌面后的状态,当前Activity可能被覆盖到下面或者锁屏了,此处有可能由于内存不足而程序被销毁,因此有必要在这里保存一下数据,但是不应该在这执行耗时的数据库保存操作。但是下一状态有可能是onStop()或者onResume() - onStop()
一般到这里说明这个Activity已经对用户不可见,就要被销毁了或者即将进入其他的Activity。它的下一状态会是onRestart()表示用户重新操作或者onDestroy()销毁。用户点返回按钮返回到桌面就执行到这一步,之后重新打开时onRestart(),也有可能清理内存销毁。 - onDestroy()
一个Activity的所有资源被释放之前的操作,如用户自行清理后台内存或者内存不足被系统自动清理
可以使用以下7个函数用日志检验一下生命周期,执行打开app,按back键返回桌面,使用主菜单键返回桌面,直接清理后台等等操作观察一下生命周期
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState, @NonNull PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
Log.d(TAG, "onSaveInstanceState: ");
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d(TAG, "onRestoreInstanceState: ");
}