《Android开发艺术探索》——笔记(一)

来源:互联网 发布:ff14捏脸数据下载 编辑:程序博客网 时间:2024/05/22 21:38

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

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

首先主要是Activity的生命周期
onCreate——(onRestart)——onStart——onResume——onPause——onStop——onDestroy

接下来是从源码的角度来分析A的onPause和B的onResume哪个先执行,这里先过。知道是A的onPause先,然后是B的onResume即可。(p4-p6)

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

1.2.1 资源相关的系统配置发生改变导致Activity被杀死并重新创建

异常情况下Activity的重建过程

在onCreate和onRestoreInstanceState里都有savedInstanceState,都可以用于获取之前存储的内容,但区别在于前者需要判断是否为空,后者不需要,后者也是官方推荐的做法。

1.2.2 资源内存不足导致低优先级的Activity被杀死

优先级:前台>可见非前台(如弹出Dialog)>后台

通过配置configChanges属性来让系统不重新创建Activity。
注:要注意screenSize和smallestScreenSize两个特殊属性,它们跟编译选项有关,跟运行环境无关。
configChanges属性

1.3 Activity的启动模式

1.3.1 standard

系统默认的启动模式,每次都会创建新实例。
当使用非Activity类型的Context(如ApplicationContext)那么就会报错,因为该模式下的Activity默认进入启动它的Activity所属的任务栈中。所以可以通过FLAG_ACTIVITY_NEW_TASK标记来为它创建一个新的任务栈来解决。

1.3.2 singleTop

如果Activity位于栈顶,则不会被重新创建,同时会回调onNewIntent。

1.3.3 singleTask

一种单实例的模式,同样也会回调onNewIntent,并且其具有clearTop的功能,可以将在它之上的Activity都给清空。

1.3.4 singleInstance

singleTask的加强版,单独位于一个任务栈中。

1.4 IntentFilter的匹配规则

包括action,category和data
只有一个Intent同时匹配action类别、category类别和data类别才算完全匹配;
一个Activity可以又多个intent-filter,一个Intent只要能匹配任何一组intent-filter即可成功启动对应的Activity。

1.4.1 action的匹配规则

Intent中的action存在且必须和过滤规则中的其中一个action相同,即视为成功。

1.4.2 category的匹配规则

Intent中可以没有category,但一旦有了,不管有几个,都要能和过滤规则中的任何一个category相同。

1.4.3 data的匹配规则