Activity 生命周期(Android开发艺术探索读书笔记)

来源:互联网 发布:大数据搜索算法 编辑:程序博客网 时间:2024/05/22 03:26

启动过程
启动过程复杂
Instrumention发出启动请求
通过binder,连接AMS,AMS维护一个ActivityStack(负责Activity的状态同步),ActivityStack通过ActivityThread同步Activity的状态,从而完成生命周期方法的调用.

一个activity启动一个Activity的时候:
old onPause->new onCreate->new onStart->new onResume->old onStop

onPause尽量不执行耗时操作,为了尽快把新的Activity show 出来

这种模式应该会兼容新的版本的Android

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

某些View会保存既定的数据状态,比如TextView(选中,文字),ListView(滑动位置)

onSaveInstanceState(Bundle)
调用时机在onStop之前,跟onPause没用既定的时序关系,系统只会在Activity即将被销毁并且有机会重新显示的情况下才会去调用它。

onRestoreInstanceState(Bundle)
异常恢复一定会被调用,参数有值,onCreate(Bundle)的参数不一定有值,所以要判断是否为空值!

onConfigurationChanged()
配置android:configChanges
可让某项内容改变而不重建Activity
这样onConfigurationChanged会回调

Activity启动模式LaunchMode

standard:默认,每次启动都会重新创建一个新的实例。

singleTop:栈顶复用模式。如 任务栈顶为同一个Activity,不会重新创建实例,所以不会回调onCreate和onStart,会回调onNewIntent

singleTask:栈内复用模式。跟android:taskAffinity配合使用,如果没有启动的activity的任务栈,就新建一个,压新的activity入栈,如果有,并且实例已存在,实例上面的Activity全部出栈,回调onNewIntent,这里具有clearTop的功能!

singleInstance: 单实例模式。加强的singleTask模式,拥有singleTask所有特性。具有这种模式的Activity只能单独位于一个任务栈.

taskAffinity (任务相关性)
allowTaskReparenting(设置为true时,会回到重新回到所属的任务栈,默认包名的任务栈或者是taskAffinity 制定的任务栈)

AndroidMenifest设置
代码Intent设置(优先)

命令adb shell dumpsys activity可查看手机activity的信息

IntentFilter的匹配规则

显式调用,(指定Component)
隐式调用,(action,category,data)

action匹配规则:
一个过滤规则中可以有多个action,那么只要Intent中的Action能够和过滤规则中的任何一个action相同即可匹配成功。(setActoin)

category匹配规则:
一旦Intent有Category,不管有多少个,每个都要能和过滤规则中的任何一个category相同。(addCategory)

data匹配规则:
和action相似,它要求intent中必须含有data数据,并且data数据能够完全匹配过滤规则中的某一个data.

PackageManager.resolveActivtity or Intent.resolveActivtity(找出最佳的匹配的Activity)

PackageManager.queryActivities
(找出所有匹配的activities)

0 0