首先,我们要知道android的生命周期几乎和活动activity的生命周期相同。想要知道activity的生命周期,那么我们先了解一下活动堆栈。
一,活动堆栈
开始我们先讲一个关于洗碗工的故事:一天有一个洗碗工在洗碟子,当他把第一个碟子洗好了就放在桶里,洗碗工每洗好一个新的碟子就往桶里放。洗碗工把碟子洗好了,就把全部的碟子放在厨房里,每放厨师出一个新的菜,就在桶里拿出一个新的碟子。直到碟子用完。
故事已经说完了,其实故事里面说的洗碗工洗碟子,就好像应用程序每当启动一个新的活动,每一个新的活动就往栈内存放。栈底就是第一个启动的活动,栈顶就是现在看到的活动。那么每次退出这个活动,就如同上面故事说的厨师出一个新的菜。直到碟子用完了,我们的应用程序页退出了界面。
二,生命周期
如果之前有学过jsp 和 servlet,就发现servlet里面也有生命周期,我们会根据不同的状态转换,而不是目前的那一个状态。现在先看下图,了解activity的生命周期。
activity的生命周期有5个状态:分别是启动,运行,暂停,停止,销毁。
1,启动activity,会调用系统的onCreate()方法,然后调用onStart()方法,最后调用onResume()方法。(启动->运行)
2,目前activity切被一个新的activity覆盖,或者是锁屏:系统调用onPause()方法。目前activity处于暂停状态,不可见。(运行->暂停)
3,目前activity由于被覆盖回到前台或者是解锁,会调用系统的onPesume()方法回到运行状态。(暂停->运行)
4,目前activity由于新的activity界面或者按了Home返回菜单,系统会调用onPause()方法,再调用onStop()方法。(运行->停止)
5,用户重新回到activity界面中,系统将调用onStart(),再调用onStart(),最后调用onResume()方法。(停止->运行)
6,用户退出activity,系统调用onPause(),再调用onStop(),最后调用onDestory()方法,退出程序。(运行->销毁).
注意:在停止状态的时候,如果手机的内存太低,或者是运行内存清理程序,就会调用onDestroy()方法杀死程序。
对于用户来说,活动状态只有3种,可见(运行和暂停),不可见(停止和销毁),获得焦点(运行)。
三,管理活动的状态
简单的说明一下生命周期的每一个方法的回调以及说明。
- onCreate():此方法在活动的创建时候调用,可以在此方法运行静态活动的初始化,并且可以在此方法创建使用界面的组件,我们可以将这个方法看做活动的入口。
- onStart():此方法会在用户将要看到的时候调用。
- onResume():此方法会在与用户互动的时候调用。
- onPause():此方法会在暂停目前的活动时候调用,例如:我们显示对话框的时候,活动就调用了此方法。并且我们也会在此方法存储尚未存储的数据。
- onStop()此方法会在停止活动的时候调用,也是用户看不见的时候。可能有3种情况,启动新活动,之前的活动返回到屏幕,或活动将被删除。
- onRestart():此方法在活动重新返回屏幕的时候调用。例如:突然来了条短信,然后你打开阅读完的短信,最后有打开了这个程序的活动。
- onDestory():此方法会在销毁活动的时候调用。
四,代码测试
public class MainActivity extends Activity {
//1,创建
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("TAG", "MainActivity:onCreate()");
}
//2,开始
@Override
protected void onStart() {
super.onStart();
Log.d("TAG", "MainActivity:onStart() ");
}
//3,继续
@Override
protected void onResume() {
super.onResume();
Log.d("TAG", "MainActivity:onResume()");
}
//4,暂停
@Override
protected void onPause() {
super.onPause();
Log.d("TAG", "MainActivity: onPause()");
}
//5,停止
@Override
protected void onStop() {
super.onStop();
Log.d("TAG", "MainActivity :onStop()");
}
//6,重新启动
@Override
protected void onRestart() {
super.onRestart();
Log.d("TAG", "MainActivity: onRestart()");
}
//7,销毁
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("TAG", "MainActivity :onDestroy()");
}
}