Activity的生命周期
正常情况
回调方法 一般情况做的工作 备注 onCreate 初始化工作 onRestart 重新启动时回调, 用户行为所致 onStart 已经可见, 但还没有出现在前台, 不能交互 onResume 已经可见, 并出现在前台, 可以交互 onPause 正在停止, 可以存储数据, 但不可太耗时, 否则影响新Activity显示 onStop 新Activity主题是透明时, 不会回调 即将停止, 可以做稍微重量级的操作 onDestroy 回收工作和资源释放 即将停止 - onCreate onDestroy: 创建和销毁
- onStart onStop: 可能回调多次(标识前台还是后台)
- onResume onPause: 可能回调多次(标识可见还是不可见)
- 异常情况之系统配置变化
默认情况下, Activity会被销毁并重新创建,
onPause->onStop->onDestroy会被调用.
系统也会调用onSaveInstanceState保存当前Activity状态, 该方法只会在Activity被异常终止时才会回调.
每个View也有其对应的onSaveInstanceState方法.
保存数据的流程
Activity#onSaveInstanceState委托Window, 再委托顶级容器(DecorView), 再委托其所有子元素. - 异常情况之内存不足
进程优先级从高到低
- 前台Activity
- 可见但非前台Activity
- 后台Activity
Activity的启动模式
LaunchMode
Launch Mode 说明 standard 默认模式, 启动Activity会重新创建一个实例, 不管是否存在, 被启动的Activity运行在启动它的那个Activity所在的栈中 singleTop 栈顶复用, 如果新Activity已经位于任务栈的栈顶, 则不会重新创建, 同时会回调其onNewIntent方法, 如果新Activity的实例已存在但不在栈顶, 它仍会重新创建 singleTask 栈内复用, 一种单实例模式, 如果新Activity的实例已经存在, 那么不会再创建新的实例, 如果Activity的实例位于栈顶, 那么和singleTop一样, 如果没有位于栈顶, 那么栈顶其他的Activity会被出栈, 将要启动的Activity实例置于栈顶, 同时调用其onNewIntent方法 singleInstance 加强的singleTask模式, 此种模式的Activity只能位于单独的任务栈中 - 任务栈和TaskAffinity
- 默认情况任务栈的名字是应用包名
- TaskAffinity与allowTaskReparenting结合的时候Activity所在的任务栈会根据启动它的Activity保持一致
- Activity的Flag
Flag 说明 FLAG_ACTIVITY_NEW_TASK 同singleTask标记 FLAG_ACTIVITY_SINGLE_TOP 同singleTop标记 FLAG_ACTIVITY_CLEAR_TOP 同一任务栈中它上面的Activity都要出栈 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 不会出现在历史Activity列表中 IntentFilter的匹配规则
- action的匹配规则
Intent的action和匹配规则的action的字符串完全一样, 一个过滤规则可以有多个action, 能够匹配一个就算成功. - category的匹配规则
category可以不指定, 此时可以匹配android.intent.category.DEFAULT, 如果指定, 那么指定的每一个category都必须要满足匹配过滤规则中的category data的匹配规则
- data的结构
配置项 类型 含义 android:schema string URI的模式, 如http, file, content android:host string URI的主机名, 如www.baidu.com, 若未指定, 则URI无效 android:port string URI的端口号, 比如80 android:path string 表述完整的路径信息 android:pathPattern string 表述完整的路径信息, 但支持通配符* android:pathPrefix string 路径的前缀信息 android:mimeType string 媒体类型 - 匹配规则
过滤规则中出现的data部分也出现在了Intent的data部分,
如果要指定完整的data, 必须使用setDataAndType, 单独使用setData或setType会清除掉对方设置的值
两种相同的data
<intent-filter> <data android:schema="file" android:host="www.baidu.com"/> </intent-filter>
和
<intent-filter> <data android:schema="file" /> <data android:host="www.baidu.com"/> </intent-filter>
隐式启动Activity时可以先判断一下使用有Activity能够匹配隐式Intent
- PackageManager#resolveActivity(Intent i, int flag)
- Intent#resolveActivity(Intent i, int flag)
- PackageManager#queryIntentActivities 返回所有成功匹配的Activity
flag 需要使用MATCH_DEFAULT_ONLY.
- action的匹配规则
1. Android Framework-Acitivty

最新推荐文章于 2022-04-18 20:33:11 发布
