一、保存活动异常销毁前的数据
1.保存的方法如下,仅在异常销毁时调用.常见的活动异常销毁情况有:内存不够系统回收后台活动,横竖屏切换。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("key", "想要保存的信息");
}
2.取出保存数据的方法,仅在异常销毁后重新加载活动时调用:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
String str = savedInstanceState.getString("key");//取出之前保存的信息
}
3.防止横竖屏切换导致的活动异常销毁
在有此要求的活动的注册位置(AndroidManifest.xml中)加如下代码:
android:configChanges="orientation"
二、activity启动模式
1.四种启动模式:
Standard :默认
singleTop:栈顶有则不新建activity
singleTask:任务栈中有则,不会新建activity,将目标activity之前的activity都出栈
singleInstance:有所有singleTask的特点,并且所有activity都在一个栈里
2.指定Activity的启动方式的两种方法:
(1)AndroidManifest.xml中的activity注册的地方添加如下代码:
android:launchMode=”standard”
(2)跳转用的Intent设置标志
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//相当于singleTask
而FLAG_ACTIVITY_SINGLE_TOP 相当于singleTop
三、隐式intent
这里,书上出现前后矛盾的说辞,有一些错误,以下是在android 7.0 模拟器上实验后的结论。
当intent同时出现显示隐式定义时,以显示为主。
1.action
隐式intent必须至少定义一个action,跳转语句只要匹配其中一个就可以了
2.category
隐式intent的category跳转语句只要匹配其中一个就可以了,并且至少定义以下一句(任何情况这一句都是必须定义的,但无需人为匹配):
下面一个例子:
java代码部分
Intent intent = new Intent();
intent.setAction("ACTION_1");
intent.addCategory("CATEGORY_2");
startActivity(intent);
AndroidManifest.xml中:
<activity android:name=".SecondActivity">
<intent-filter >
<action android:name="ACTION_1"/>
<action android:name="ACTION_2"/>
<category android:name="CATEGORY_1"/>
<category android:name="CATEGORY_2"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>