一、活动生存期
1、Activity类中一共七个回调方法
onCreate(),活动第一次创建的时候用的方法。在这个方法中要完成活动的初始化,如加载布局、绑定事件。——活动由无到有
onStart(),这个方法在活动由不可见变为可见的时候调用。——活动开始运行
onResume(),这个方法在活动准备好和用户进行交互的时候调用。因此,调用该方法时活动一定位于栈顶。——活动由静到动
onPause(),系统准备去启动或恢复另一个活动时调用,对话框形式活动会得到执行。——活动由动到静
onStop(),在活动完全不可见的时候调用,对话框形式活动不会得到执行。——活动最后停止
onDestroy(),在活动销毁之前调用,之后活动为销毁状态。——活动由有到无
onRestart(),活动在停止状态到运行状态前调用,也就是活动被重新启动。——活动由停止状态到运行状态
2、生存期阶段
onCreate()方法和onDestroy()方法之间所经历的就是一个完整的生存周期。
onStart()方法和onStop()方法之间经历的是可见生存周期。最前者对资源加载,最后者对资源进行释放
onResume()方法和onPause()方法之间所经历的是前台生存期。活动总是处于运行状态,期间可能和用户进行交互
3、一个活动的完整周期运行都会依当前活动所在状态执行以上的所有相应的方法,如果没有方法重写则不做任何动作
*4、在布局文件中,代码如下:
*5AndroidManifest.xml中的注册代码如下:
可为活动指定主题(安卓内置主题有很多可以选,当然也可以自制)。而这里的@android:style/Theme.Dialog是表示使用对话框式的主题。
二、活动被回收
1、当在a活动运行中打开b活动,a活动就会停止,若系统内存不够,a活动就会被回收。当在b活动按back键时,一样会返回a活动,但不是开始执行onRestart方法了而是执行oncreate方法。相当于a活动被关闭要重新创建再启动,这时候用户之前在a活动的实时数据就会消失。
2、 onSaveInstanceState()方法保证在活动被回收的时候会被执行,再配合putInt()方法保存整型数据putString()方法保存字符串数据,以此类推。onSaveInstanceState()方法携带一个Bundle类型参数。putInt()之类的方法都有两个参数,第一个参数从Bundle取值(其实就是一个数据的代号,供以后引用该数据时当地址使用),第二个参数是真正要保存的内容。
示例:
protected void onsavedInstanceState(Bundle outState) {
super.onsavedInstanceState(outState);
String tempData="something you just typed";
outState.putString("data_key",tempData);
}
以上用 onSaveInstanceState()方法,当活动要被回收时执行该方法保存数据。然后就是恢复数据:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"onCreate");
setContentView(R.layout.first_layout);
if (savedInstanceState!=null){ //null就是空 if这一段就是判断恢复数据的
String tempData=savedInstanceState.getString("data_key"); 由于onsavedInstanceState方法在活动回收时已经
Log.d(TAG.tempData); 把savedInstanceState附带之前保存的数据,因此
} if后面的恢复数据能进行(即额外执行多一次打印)
... ...
}