笔记:Activity相关

2017-10-23  本文已影响37人  jiaming_

Activity相关




Activity的启动过程相当复杂,涉及Instrumentation,ActivityThread,ActivityManageService(AMS)

简单步骤:启动Activity的请求由Instrumentation来处理,它会通过Binder向AMS发送请求,AMS内部维护着一个ActivityStack并负责栈内Activity的状态同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用,ActivityThread内部通过ApplicationThread的scheduleLaunchActivity(通过Handler来执行)来完成新Activity的onCreate,onStart,onResume。


onSaveInstanceState调用时机:onStop之前,但和onPause没有顺序关系,可能在前,可能在后。
onRestoreInstanceState调用时机:onStart之后。

1.png

关于保存与恢复View的层次结构流程:首先,Activity被异常终止时,Activity会调用onSaveInstanceState,然后Activity会委托Window去保存数据,接着,Window会委托顶层容器DecroView(一个ViewGroup)去保存数据,从而一层层通知子View来保存数据。



当指定android:configChanges='orientation|screenSize'时,切换屏幕方向,不会重新走生命周期,而是会调用OnConfigurationChanged


TaskAffinity和allowTaskPreparening一起使用时:应用A启动应用B的某个Activity,如果这个Activity的allowTaskPreparening为true,那么当启动B应用时,此Activity会直接从A的任务栈转移到B的任务栈。(P19)




Flags.png

FLAG_ACTIVITY_NEW_TASK一般与FLAG_ACTIVITY_CLEAR_TOP配合使用,这样,如果被启动的Activity实例已经存在,则移除它顶部的Activity,调用它的onNewIntent方法


Action

为字符串,区分大小写,一个Intent中设置的action只要与过滤规则中的任何一个action匹配则算是匹配成功

Category

为字符串,可以不设,不设置默认匹配成功,不设置为android.intent.category.DEFALUT,设置了后,不管设置几个,都必须与过滤条件中的其中一个匹配,否则匹配失败。

data

与action类似,如果过滤规则中定义了data,那么intent中也要定义可匹配的data,data的语法参考 p31


也可以采用PackageManager提供的queryAllActivies方法,它不是返回一个最佳匹配的Activity,而是返回所有匹配的activity的集合,第二个参数需要传入MATCH_DEFALUT_ONLY

queryAllActivies
上一篇 下一篇

猜你喜欢

热点阅读