一个活动在其生命周期中最多会有四种状态:运行状态、暂停状态、停止状态和销毁状态。Activity类中定义了7个回调方法,覆盖了生命周期的每一个环节。
1. onCreate():它会在活动 第一次被创建的时候调用。在这个方法中可以完成活动的初始化操作,比如加载布局、绑定事件等。
2. onStart():这个方法在活动由不可见变为可见的时候调用。
3. onResume():这个方法在活动准备好和用户进行交互的时候调用。
4. onPause():这个方法在系统准备去启动或者恢复另一个活动的时候调用。
5. onStop():这个方法在活动完全不可见的时候调用。
6. onDestroy():这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
7. onRestart():这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。
当一个屏幕旋转的时候的生命周期是怎样的?
首先会被销毁掉,再重新创建。例如:当前程序处于onPause(),旋转过程调用的顺序为:onPause()→onStop()→onDestroy()→onCreate()→onStart()→onResume()→onPause。
Activity中还提供了一个onSaveInstanceState()回调方法,这个方法会在onStop()之前被执行,我们可以在这方法中保存一些数据,解决活动被回收时临时数据得不到保存的问题。
通过重写onSaveInstanceState(Bundle outState)方法可以保存数据:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String s = input.getText().toString();
outState.putString("name",s);
}
在onCreate()方法中可以取出数据,并且恢复数据:
if (savedInstanceState!=null){
String name = savedInstanceState.getString("name", null);
Log.i(TAG, "onCreate: ++++++++++"+name);
}
活动的启动模式一共有四种:standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml配置文件中给<activity>标签指定android:launchMode属性来选择启动模式。
Android 是使用返回栈来管理活动的。栈是一种后进先出的数据结构,在默认情况 下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。而每当我们 按下 Back 键或调用 finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入 栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。
standard模式:活动默认的启动模式,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。
当我们返回的时候他也是从最上边开始返回的。
singleTop:在启动活动的时候如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。
可以看到在当前活动为Activity2的时候启动Activity2,由于栈顶活动为Activity2,所以没有创建新的新的活动,而是直接使用。
singleTask:每次启动活动时系统会首先在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这活动之上的所有活动全部出栈,如果没有则创建一个新的活动。
可以看到在启动Activity3的时候,返回栈中有这个活动,于是直接使用,并把出于其上的Activity1和Activity2全部出栈。
singleInstance:被指定为singleInstance的活动在启动时会启用一个新的返回栈来管理这个活动。
在返回的时候,由于存在了两个栈,会先返回当前栈,等栈为空,才开始返回另一个栈。