Android 开发艺术探索(第一章-Activity 的生命周期和启动模式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BlueSky003/article/details/81030041

1、Activity 的生命周期全面分析

  1. Activity 的生命周期全面分析:onCreat,onRestart,onStart,onResume,onPause,onStop,onDestroy。
  2. 资源相关的系统配置发生改变导致 Activity 被杀死并重新创建。
  3. 系统配置改变 onSaveInstanceState 在 onStop 之前,onRestoreInstanceState 在 onStart 之后。系统自动保存和恢复 View 的层次结构,如 TextView 保存文本选中状态和文本内容。
  4. 资源内存不足导致低优先级的 Activity 被杀死。
  5. Activity 优先级:前台 Activity-正在和用户交互的 Activity、可见非前台 Activity -如 Activity 弹出对话框、后台 Activity-已经被暂停的 Activity,如执行 onStop。
  6. 常见系统配置 locale、orientation、KeyboardHidden、screenSize。
  7. configChanges 设置 orientation | screenSize 旋转屏幕,Activity 不会重新创建,调用 onConfigurationChanged 方法。

2、Activity 的启动模式

  1. Launchmode:standard(标准模式)、singleTop(栈顶服用模式)、singleTask(栈内服用模式)、singleInstance(单实例模式)
  2. singleTop、singleTask 复用生命周期 onPause->onNewIntent->onResume
  3. 任务栈,TaskAffinity 指定任务栈的名字。
  4. 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 的匹配规则

  1. action 的匹配规则:Intent 中的 action 存在且必须和过滤规则中的其中一个 action 匹配。
  2. category 的匹配规则:Intent 如果含有 category,那么所有的 category 都必须和过滤规则中的其中一个 category 相同。
  3. activity 能够接收隐式调用,必须在 intent-filter 中指定 “android.intent.category.DEFAULT” 这个 category。startActivity / startActivityForResult 的时候默认会为 Intent 加上这个 category。
  4. data 的匹配规则:和 action 的匹配规则类似,如果过滤规则中定义了 data,那么 Intent 中必须也定义可匹配的 data。
  5. data 由 mimeType 和 URI 组成。mimeType 指媒体类型,如 image、jpeg、audio、video/*等。URL:://:/[||]
  6. 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 表示路径的前缀信息。
  7. URI 的默认值为 content 或者 file。
  8. 隐式启动 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"/>

猜你喜欢

转载自blog.csdn.net/BlueSky003/article/details/81030041