(注:听说写博客可以帮助记忆,就试着整理了一下笔记)
(注:这是进阶书的笔记,并不适用于初学者入门,抱歉~如果你是已学习过Android开发艺术探索,可以当复习笔记。)
1.Activity的生命周期
一. 生命周期的方法之间的区别:
1. onStart()时,表示Activity已经可见,但还在后台。而onResume()时,表示Activity可见,并且显示到前台。
2. onStart()和onStop()是从Activity是否可见这个角度来回调的,而onResume()和onPause()是从Activity是否位于前台这个角度来回调的。
二. 异常情况下的生命周期:
常见的异常情况有:
1.横屏(landscape)和竖屏(portrait)的切换。
2.按HOME键或启动新Activity。
3.资源内存不足,Activity被杀死。
protected void onSaveInstanceState(Bundle savedInstanceState)
(注:在意外情况发生后调用)
protected void onRestoreInstanceState(Bundle savedInstanceState)
(注:在意外情况发生后重新创建Activity在onCreate()后调用)
三. Activity的configChanges属性:
(注:在清单文件中配置)
常用的项目:
1.keyboardHidden :键盘的可访问性发生了改变,比如调出键盘。
2.locale :设备的本地位置发生了改变,比如切换了系统语言。
3.orientation :设备屏幕方向发生了改变。
(注:属性取多个值是,可用”|“连接起来)
该属性配置了哪种项目,哪种项目发生时就不会使Activity重新创建,即不会调用onSaveInstanceState和onRestoreInstanceState两方法,而会调用:
public void onConfigurationChanged(Configuration newConfig)这个方法。
二. Activity的启动模式
一.设置Activity的启动模式的方法:
1. Activity的launchMode属性
(注:在清单文件中配置)
项目:
1.standard :标准模式,默认的启动模式。
2.singleTop :栈顶复用模式,如果任务栈的栈顶的Activity就是要新创建的Activity,则复用,不会创建,同时onNewIntent方法会被回调。
3.singleTask :栈内复用模式,如果要创建的Activity(记为A)在任务栈内有实例了,则A上面的Activity全部出栈(销毁,这称为clearTop效果),直到A为栈顶Activity,同时onNewIntent方法会被回调。
4.singleInstance :单实例模式,一个任务栈中就能单独有一个Activity。
2.通过Intent设置标志位
标志位 :
1.FLAG_ACTIVITY_NEW_TASK :“singleTask模式“
2.FLAG_ACTIVITY_SINGLE_TOP:“singleTop模式”
3.FLAG_ACTIVITY_CLEAR_TOP:“singleTask模式默认就具有此标记位的效果 ”
4.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:”具有这个标记的Activity不会出现在历史Activity列表里“
用例:Intent intent = new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Intent intent = new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
二.IntentFilter的匹配规则:
(注:一个Activity中可以有多个intent-filter,一个隐式Intent只要能匹配任何一组intent-filter即可成功启动对应的Activity)
1.action的匹配规则
一个
intent-filter可以有多个action,只要Intent全部的action,至少有一个intent-filter有相同对应的全部action,即匹配成功。
2.category的匹配规则
1.Intent如果有category,只要Intent全部的category,至少有一个intent-filter有相同对应的全部category,即匹配成功。
2.Intent如果没有category,只要Activity的有一个intent-filter没有设置category的匹配规则,则匹配成功。(实质:没有设置category的匹配规则的intent-filter会默认有一个<category android:name="android.intent.category.DEFAULT"/>)
3.data的匹配规则
data分为mimeType(媒体类型)和URI两部分。
data的匹配规则和action类似。
4.主Activity的intent-filter
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LAUNCHER" />
这二者共同作用是用来标明这是一个入口Activity,并且会出现在系统的应用列表中。
(如果发现错误,欢迎提出)