1.返回栈
活动是通过任务来管理的,一个任务就是一组存放在栈里的活动的集合,这个栈被叫作返回栈。
2.活动的状态
每个活动在其生命周期中最多可能会有4种状态。
- 运行状态
当一个活动位于返回栈的栈顶时,这时活动就处于运行状态。 - 暂停状态
当一个活动不再处于栈顶,但是仍然可见时(并不是所有活动都会占满整个屏幕的),活动就进入了暂停状态。处于暂停状态的活动仍然是完全活着的,只有内存极低的情况下,系统才会考虑回收这种活动。 - 停止状态
当活动不再处于栈顶并且完全不可见的时候就进入停止状态。系统仍然会为这种活动保存相应的状态和成员变量,但是当其他地方需要内存时,处于停止状态的活动是又可能被系统回收的。 - 销毁状态
当活动从返回栈中移除后就变成了销毁状态。系统最倾向于回收处于这种状态的活动,来保证手机的内存充足。
3.活动的生存期
Acitivity类中定义了7个回调方法,覆盖了活动生命周期的每一个环节。
- onCreate() 在活动第一次被创建时调用。通常在这个方法中完成活动的初始化操作。
- onStart() 在活动由不可见变为可见时调用。
- onResume() 在活动准备好用户进行交互时调用。此时活动一定处于返回栈的栈顶而且是运行状态。
- onPause() 在系统准备去启动或者恢复另一个活动时调用。通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据。
- onStop() 在活动完全不可见的时候调用。和onPause()的区别在于,如果启动的新活动是一个对话框的活动时,执行的是onPause()而不是onSyop()
- onDestory() 把活动状态变为销毁状态。
- onRestart() 把活动重新启动,在活动由停止状态变为运行状态之前调用。
以上除了onRestart()外都是两两相对的,从而又可以将活动分为3种生存期:
- 完整生存期。活动在onCreate()和onDestory()之间所经历的,就是完整生存期。
- 可见生存期。活动在onStart()和onStop()之间所经历的就是可见生存期。在可见生存期里,活动对于用户总是可见的,即使有可能无法和用户进行交互。我们可以通过这两个方法,合理地管理那些对用户可见的资源。
- 前台生存期。活动在onResume()和onPause之间经历的就是前台生存期。在前台生存期里,活动总是处于运行状态的,此时活动是可以和用户进行交互的。
4.活动被回收时临时数据的保存方法
Activity中提供了一个onSaveInstanceState()的回调方法,可以保证在活动被回收前一定会被调用,因此可以用于解决活动被回收时临时数据得不到保存的问题。onSaveInstanceState()方法携带一个Bundle类型的参数,Bundle提供了一系列的方法用于保存数据。
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
//想要存放的临时数据
String tempData = "Something you just typed";
outState.putString("data_key",tempData);
}
利用onCreate中也有Bundle类型的参数,把数据取出来
if (savedInstanceState != null) {
String tempData = savedInstanceState.getString("data_key");
Log.d(TAG, tempData);
}