《Android开发艺术探索》读书笔记--第1章 Activity 的生命周期和启动模式

第1章 Activity 的生命周期和启动模式

1.1 Activity 的生命周期全面分析

  1. 典型情况下生命周期
  2. 异常情况下生命周期:Activity 被系统回收、当前 Configuration 发生改变导致 Activity 被销毁重建。

1.1.1 典型情况下的生命周期分析

  1. onCreate:正在被创建,初始化工作。
  2. onRestart:正在重新启动,Activity 从不可见变为可见。
  3. onStart:正在被启动,Activity 已经可见,还没有出现在前台,无法与用户交互。
  4. onResume:已经可见,可以交互。
  5. onPause:正在停止,存储数据、停止动画等操作,不能太耗时,onPause 必须执行完,新的 Activity 的 OnResume 才会执行。
  6. onStop:即将停止,稍微重量级的回收工作,但不能太耗时。
  7. onDestroy:即将被销毁,回收工作和最终资源释放。
  8. onStart 和 onStop 是从 Activity 是否可见的角度
  9. onResume 和 onPause 是从 Activity 是否位于前台的角度
  10. 一个 Activity 启动另一个 Activity 时候,旧 Activity 先 onPause ,然后新 Activity 再启动。

1.1.2 异常情况下的生命周期分析

  1. 资源相关的系统配置发生改变导致 Activity 被杀死并重新创建(系统配置)
1.onSaveInstanceState 调用在 onStop 之前,和 onPause 没有固定顺序
2.onRestoreInstanceState 调用在 onStart 之后
3.Activity -> Window -> ViewGroup(DecorView) -> 通知子元素
4.系统能够自动做一些 View 层级结构方面的数据存储和恢复
5.onRestoreInstanceState 一旦被调用,Bundle 一定有值,onCreate 不一定
6.系统异常终止才会调用 onSaveInstanceState 和 onRestoreInstanceState 方法
  1. 资源内存不足导致低优先级的 Activity 被杀死(内存不足)
1.优先级:前台 Activity 、 可见但非前台 Activity 、 后台 Activity
  1. android:configChanges
1.不重新创建 Activity
2.locale、orientation、keyboardHidden 常用三个选项
3.onConfigurationChanged() 

1.2 Activity 的启动模式

  1. standard:标准模式
  2. singleTop:栈顶复用模式、如果在栈顶调用 onNewIntent()
  3. singleTask:栈内复用模式、onNewIntent、默认有 clearTop 效果
  4. singleInstance:单实例模式、单独一个栈中
  5. Activity 所需任务栈:TaskAffinity
  6. 任务栈:前台任务栈、后台任务栈
  7. 方式
1.activity:launchMode -> 优先级低 无法设置 FLAG_ACTIVITY_CLEAR_TOP
2.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 无法设置 singleInstance

1.2.2 Activity 的 Flags

  1. FLAG_ACTIVITY_NEW_TASK:singleTask
  2. FLAG_ACTIVITY_SINGLE_TOP:singleTop
  3. FLAG_ACTIVITY_CLEAR_TOP:配合 FLAG_ACTIVITY_NEW_TASK 使用
  4. FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:android:excludeFromRecents=“true” 不会出现在 Activity 列表中

1.3 IntentFilter 的匹配规则

  1. 一个 Activity 中可以有多个 intent-filter,匹配一组,则启动成功
  2. Activity 启动方式
1.显式调用
2.隐式调用:配合 IntentFilter(action 必须一样、category 一旦有必须相同、data(mimeType、scheme) 必须一样)
3.setDataAndType(指定完整的 data 必须使用这个,不能使用 setData、setType)
4.使用 PM 的 queryIntentActivity 或 resolveActivity 判断匹配信息 flag:MATCH_DEFAULT_ONLY
  1. 匹配规则
1.action
action是一个字符串,匹配是指与action的字符串完全一样,区分大小写。
一个intent-filter可以有多个aciton,只要Intent中的action能够和任何一个action相同即可成功匹配。Intent中如果没有指定action,那么匹配失败。
2.category
category是一个字符串。Intent可以没有category,但是如果你一旦有category,不管有几个,每个都必须与intent-filter中的其中一个category相同。系统在 startActivity 和 startActivityForResult 的时候,会默认为Intent加上 android.intent.category.DEFAULT 这个category,所以为了我们的activity能够接收隐式调用,就必须在intent-filter中加上 android.intent.category.DEFAULT 这个category。
3.data
data的匹配规则与action一样,如果intent-filter中定义了data,那么Intent中必须要定义可匹配的data。由两部分组成:mimeType和URI。mimeType是指媒体类型,比如
image/jpeg、audio/mpeg4-generic和video/等,可以表示图片、文本、视频等不同的媒体格式。
发布了40 篇原创文章 · 获赞 15 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_44947117/article/details/104075625