1.Activity异常的生命周期
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//资源相关的系统配置文件发生改变时或者内存不足时,导致Activity被杀死并重写创建调用
//可以用来保存下次需要回复的数据
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//取出之前保存的数据并恢复,和onCreate方法参数的区别是,这个方法一旦被调用 Bundle 里
//一定有数据,不需要判断null
}
总结: 异常的时候才会回调这两个方法用于保存和恢复数据。
当在清单文件的activity声明中加了 android:configChanges="keyboardHidden|orientation|screenSize"
屏幕旋转时,activity就不会重建,也不会调用上面两个方法,但是会调用`
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//处理屏幕旋转时的事件
}`
2.Activity启动模式
任务栈是一种后进先出的模式
(1)standard标准启动模式:A启动B,那么B就在A的任务栈里面,每次都会创建一个新的实例。注意:非Activity的Context 去启动活动会报错(如ApplicationContext不能启动) 如果非要启动的话 必须加上标记 Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 这样启动的Activity实际上是以singleTask模式启动的。
(2)singleTop栈顶复用模式:A启动B之后,又启动B。B不会被重新创建,他的onCreate和onStrart不会回调。会调用:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
(3)singleTask栈内复用模式:,有就会调用onNewIntent,只不过是把他上面的全部清除了
(4)singleInstance单实例模式: 如果一个任务栈里面没有就创建新的任务栈。
3.IntentFilter匹配规则
1.action的匹配规则:intent中的action必须存在且必须和过滤规则中的一个匹配成功。
2.category:intent中可以没有category,但是如果有必须和过滤规则中的一个匹配成功。intent中默认带上了android.intent.category.DEFAULT 所以清单里默认加了 <category android:name="android.intent.category.DEFAULT" />
3.data:由mimeType媒体类型和URL组成 ,intent中的data必须存在且必须和过滤规则中的一个匹配成功.
URL有默认值:content或者是file.所以要匹配 schema必须指定 他们当中其中一个。
注意:查看是否有能匹配的activity可以通过如下方法判断:
PackageManager manager = this.getPackageManager();
manager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);//是否有判断null
manager.resolveActivity(intent,PackageManager.MATCH_DEFAULT_ONLY);//成功匹配返回的信息