Android(安卓)开发艺术探索(第一章-Activity 的生命周期和启动模式)
16lz
2021-01-25
1、Activity 的生命周期全面分析
- Activity 的生命周期全面分析:onCreat,onRestart,onStart,onResume,onPause,onStop,onDestroy。
- 资源相关的系统配置发生改变导致 Activity 被杀死并重新创建。
- 系统配置改变 onSaveInstanceState 在 onStop 之前,onRestoreInstanceState 在 onStart 之后。系统自动保存和恢复 View 的层次结构,如 TextView 保存文本选中状态和文本内容。
- 资源内存不足导致低优先级的 Activity 被杀死。
- Activity 优先级:前台 Activity-正在和用户交互的 Activity、可见非前台 Activity -如 Activity 弹出对话框、后台 Activity-已经被暂停的 Activity,如执行 onStop。
- 常见系统配置 locale、orientation、KeyboardHidden、screenSize。
- configChanges 设置 orientation | screenSize 旋转屏幕,Activity 不会重新创建,调用 onConfigurationChanged 方法。
2、Activity 的启动模式
- Launchmode:standard(标准模式)、singleTop(栈顶服用模式)、singleTask(栈内服用模式)、singleInstance(单实例模式)
- singleTop、singleTask 复用生命周期 onPause->onNewIntent->onResume
- 任务栈,TaskAffinity 指定任务栈的名字。
- Activity 的 Flags:FLAG_ACTIVITY_NEW_TASK-作用和 singleTask 相同;FLAG_ACTIVITY_SINGLE_TOP-作用和 singleTop 相同;FLAG_ACTIVITY_CLEAR_TOP-同一个任务栈所有位于它上面的 Activity 都要出栈,一般和 FLAG_ACTIVITY_NEW_TASK 配合使用,如果启动的 Activity 实例已存在,系统会调用它的 onNewIntent。如果被启动 Activity 为 standard 模式,那么它和它之上的 Activity 都要出栈,系统会创建新的实例并放入栈顶,singleTask 启动模式默认就具有此标记为的效果。FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS-具有此标记的 Activity 不会出现在历史 Activity 的列表中。和 Activity 的属性 android:excludeFromRecents=”true” 一样。
3、IntentFilter 的匹配规则
- action 的匹配规则:Intent 中的 action 存在且必须和过滤规则中的其中一个 action 匹配。
- category 的匹配规则:Intent 如果含有 category,那么所有的 category 都必须和过滤规则中的其中一个 category 相同。
- activity 能够接收隐式调用,必须在 intent-filter 中指定 “android.intent.category.DEFAULT” 这个 category。startActivity / startActivityForResult 的时候默认会为 Intent 加上这个 category。
- data 的匹配规则:和 action 的匹配规则类似,如果过滤规则中定义了 data,那么 Intent 中必须也定义可匹配的 data。
- data 由 mimeType 和 URI 组成。mimeType 指媒体类型,如 image、jpeg、audio、video/*等。URL:://:/[||]
- Scheme:URI 的模式,如 http、file、content 等,没有指定 scheme 整个 URI 无效。Host:URI 的主机名,如 www.baidu.com 等,没有指定 scheme 整个 URI 无效。Port:URI 的端口号,如 80 等,仅当指定了 scheme 和 host 参数的时候 port 才有意义。Path、pathPattern、pathRrefix:表述路径信息,path 表示完整的路径信息;pathPattern 也表示完整的路径信息,但是里面可以包含通配符 “” ,“” 表示 0 个或者多个任意字符,想表示真正的字符串 “” 要写成 “\”,“\” 要写出 “\\”;pathPrefix 表示路径的前缀信息。
- URI 的默认值为 content 或者 file。
- 隐式启动 Activity 可以通过 PackageManager 的 resolveActivity 方法或者 Intent 的 resolveActivity 方法返回最佳匹配,找不到返回 null。PackageManager 的queryIntentActivitys 方法返回所有成功匹配的 Activity 信息。
<data android:scheme="scheme" android:host="host" android:port="80" android:path="/path" android:pathPrefix="/pathPrefix" android:mimeType="mimetype"/>
更多相关文章
- No.11 使用firewall配置的防火墙策略的生效模式
- AndroidStudio离线使用gradle
- Android之装饰者模式
- Android(安卓)Studio去除标题栏
- Android(安卓)Material Design控件学习(一)——TabLayout的用法
- Android(安卓)studio下搭建svn
- Android调用系统内部的下载程序下载文件(二)
- delphi xe5 android sample
- NDK 环境配置 (Ubuntu)