Activity的生命周期
Activity是一个负责与用户交互的组件,在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity 之间通过意图【Intent】进行通信。
活动状态
运行状态:位于返回栈栈顶;
暂停状态:不在返回栈栈顶,但可见;
停止状态:不在返回栈栈顶,且完全不可见;
销毁状态:活动从返回栈中移除。
典型情况下的声明周期
:
正在创建onCreate:加载布局、绑定事件等活动的初始化操作;
即将开始onStart:活动由不可见变为可见;
出现在前台并开始活动onResume:运行状态;
正在停止onPause:系统准备去启动或者恢复另一个活动
时调用;
即将停止onStop:完全不可见时调用;
正在重新启动onRestar:停止状态变成运行状态。
即将被销毁onDestroy:
系统内存不足时可能会回收进入停止状态的活动所占用的资源;
**onSavedInstanceState()**保证活动被回收之前一定会被调用,解决活动被收回时临时数据得不到保存的问题;
Bundle提供一系列的方法用于保存数据;
Bundle结合Intent:把需要保存的数据保存在Bundle对象中,然后将Bundle对象放在Intent中。在目标活动中先从Intent中取出Bundle,再从Bundle中意义取出数据。
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
String tempData ="Something you just typed";
outState.putString("data_key",tempData);
}
@Override
protected void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
Log.d(TAG,"onCreate");
setContentView(R.layout.activity_main);
if(saveInstanceState != null){
String tempData=saveInstanceState.getString("data_key");
Log.d(TAG,tempData);
}
...
}
异常情况下的周期声明
:Activity被系统回收或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建。
在返回栈中调用finish()方法或者按下back键栈顶的活动会被销毁。
随时随地退出程序
用一个专门的集合类对所有的活动进行管理——活动管理器
public class ActivityCollector{
public static List<Activity> activities = new ArrayList<>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishALL(){
for(Activity activity:activities){
if(!activity.isFinishing()){
activity.finish();
//杀掉*当前*进程的代码,保证程序完全退出
android.os.Process.killProcess(android.os.Process.myPid());
}
}
activities.clear();
}
}
public class BaseActivity extends AppCompatActivity{
@Override
protected void onCreated(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
Log.d("BaseActivity",getClass.getSimpleName());
ActivityCollector.addActivity(this);//当前活动加入活动管理器
}
@Override
protected void onDestroy(){
super.onDestory();
ActivityCollector.removeActivity(this);//将当前活动销毁
}
}
Activity启动模式
在标签指定android:launchMode属性来选择启动模式。
标准模式standard
:默认该模式。每次启动一个Activity时不管该实例是否存在都会重新创建一个新的实例,是系统的默认模式。
单一栈顶模式singleTop
:如果新Activity的实例已经存在但不是位于栈顶,那么新Activity会重建该实例,如果存在于栈顶则不会新建该实例【如短信应用】
单一任务栈singleTask
:启动activity的时如当前的任务栈中已经有这个activity的实例了, 那么就不会新创建这个activity的实例,并将此activity之上的实例弹出栈【如浏览器】
单一实例模式singleInstance
:整个手机系统中只有这一个activity实例,且它在一个单独的任务栈中。