四大组件-活动
活动
活动(Activity),是一个应用组件,用于显示界面并用户进行交互。
1.活动的启动模式
分为四种启动模式,分别是 "standard"、"singleTop"、"singleTask"、"singleInstance"、
我们需要在清单文件中
<activity android:name=".SecondActivity" android:launchMode="standard" />
(1) standard
这个是默认启动模式。
以这种方式启动活动每次都会创建一个新的实例。
创建的活动都会入栈,并处于栈的顶端位置。
(2)singleTop
当启动活动时发现栈顶端已经是该活动,则直接使用该活动,并调用该实例的onNewIntent()方法向其传送Intent,而不会再创建新的活动实例。 如果该活动不是在栈顶位置时,则还是会创建新的实例。
(3)singleTask
以这种方式启动活动,每次系统都回去返回栈中检查是否存在该活动的实例,如果已经存在则直接使用该实例,并把这个活动之上的所有活动都出栈。如果没有发现则会创建一个新的实例。
(4)singleInstance
指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动。
保证无论从那个Task启动Activity都这会创建一个Activity实例,并将它假如到新的Task 栈顶。
2.活动的生命周期
- 当创建一个活动MainActivity:
08-30 14:54:13.745 3154-3154/? D/MainActivity: onCreate:
08-30 14:54:13.745 3154-3154/? D/MainActivity: onStart:
08-30 14:54:13.745 3154-3154/? D/MainActivity: onResume:
- 当从MainActivity 跳转到 SecondActivity
08-30 14:57:44.429 3154-3154/com.tiger.intenttest D/MainActivity: onPause:
08-30 14:57:44.454 3154-3154/com.tiger.intenttest D/SecondActivity: onCreate:
08-30 14:57:44.454 3154-3154/com.tiger.intenttest D/SecondActivity: onStart:
08-30 14:57:44.455 3154-3154/com.tiger.intenttest D/SecondActivity: onResume:
08-30 14:57:45.078 3154-3154/com.tiger.intenttest D/MainActivity: onStop:
3.从SecondActivity通过Back键返回到 MainActivity
08-30 14:59:53.554 7583-7583/com.tiger.intenttest D/SecondActivity: onPause:
08-30 14:59:53.556 7583-7583/com.tiger.intenttest D/MainActivity: onRestart:
08-30 14:59:53.556 7583-7583/com.tiger.intenttest D/MainActivity: onStart:
08-30 14:59:53.556 7583-7583/com.tiger.intenttest D/MainActivity: onResume:
08-30 14:59:53.883 7583-7583/com.tiger.intenttest D/SecondActivity: onStop:
08-30 14:59:53.883 7583-7583/com.tiger.intenttest D/SecondActivity: onDestroy:
3.保存和恢复Activity 状态
比如说有这样一个情况,在MainActivity中有一个EditText,你已经输入的了数据,然后你跳转到SecondActivity中,过了一会由于系统内存不足,MainActivity被回收,那么当我们再返回到MainActivity中时会再创建一个新的ManActivity,我们在EditText输入的内容也会消失。
这时候我们就用到了 onSaveInstanceState() onRestoreInstanceState()
- onSaveInstanceState()
这个方法在活动被回收之前一定会调用。
通常来说,跳转到其他activity或者是点击Home键都会执行该方法。 还有就是当:锁屏、屏幕方向切换
Activity可以用键值对集合来保存状态信息。这个方法会默认实现保存有关Activity视图层次的状态信息,例如EditText中的文本,或者ListView的滚动位置。
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.d(TAG, "onSaveInstanceState: ");
outState.putString("data_key",et.getText().toString());
super.onSaveInstanceState(outState);
}
- onRestoreInstanceState()
这个方法只有在活动确实被系统销毁后,才会执行。 另外也可以写在onCreate()方法中,不过需要判断下savedInstanceState是否为Null。
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
Log.d(TAG, "onRestoreInstanceState: ");
if(savedInstanceState!=null){
et.setText(savedInstanceState.getString("data_key"));
}
super.onRestoreInstanceState(savedInstanceState);
}
更多请参考:
https://developer.android.com/training/basics/activity-lifecycle/recreating.html
https://developer.android.com/guide/components/activities.html