第一章
1.1.1 典型情况下的生命周期
A跳到B:A.onPause-B.onCreate-B.onStart-B.onResume-A.onStop
1.1.2 异常状态下的生命周期
情况一:资源相关配置发生改变导致Activity被杀死并重建
activity异常终止系统会调用onSaveInstanceState来保存当前状态,调用时机是在onStop之前,但是和onPause没有既定的时序关系。
当Activity被重新创建后会调用onRestoreInstanceState,并且会把onSaveInstanceState时保存的bundle作为参数同时传递给onRestoreInstanceState和onCreate。onRestoreInstanceState调用时机是在onStart之后。
系统只有在Activity异常终止的时候才调用onSaveInstanceState和onRestoreInstanceState,其他情况不会触发这个过程
PS:android:configChanges声明该属性当配置发生变化时系统不会让Activity重启。
SDK>=13旋转屏幕不重启需要设置orientation和scrennSize,<13只需要orientation
情况二:资源内存不足导致低优先级的Activity被杀死
1.2 Activity的启动模式
1.3IntentFilter的匹配模式
1.Action的匹配规则:Intent中的Action存在且必须和过滤规则中的其中一个action相同。
2.Category匹配规则:如果Intent中有category,不管有几个,必须被过滤规则中的category包含。
如果没有category,Intent也会被匹配,因为系统默认会加入android.intent.category.DEFAULT。同理如果activity要被隐式调用,必须在IntentFilter中加入android.intent.category.DEFAULT。
3.Date的匹配规则:和 Action类似,如果过滤规则定义了data,Intent中必须定义可匹配的Data。
URI=<Scheme>://<Home>:<port>/[<path>]
Scheme:http,file,content(默认值为file和content),如果没指定该值则uri无效
Host:如果没指定该值则uri无效
Port:仅当指定了Scheme和Host才有效
当通过隐式的方式启动一个Activity,要判断系统能不能匹配到期望的Activity,判断方法有两种:
public abstract List<ResolveInfo> queryIntentActivities(Intent intent,int flags)
public abstract ResolveInfo resolveActivity(Intent intent,int flags)
第二个参数要注意要使用MATCH_DEFAULT_ONLY这个标记位,表示仅仅匹配intent-filter中声明了<category android:name="android.intent.category.DEFAULT"/>的Activity。从而防止虽然上述两个方法返回的不是NULL,但是真正启动时仍然会出错。