重温Android开发艺术探索之一Activity得生命周期与启动模式

160 阅读2分钟

Activity生命周期与启动模式

生命周期

  • 一个Activity必须onPause后,新Activity才能被启动。
  • Activity的启动流程可以简单的理解为请求由Instrumentation处理,然后它通过binder想AMS发送请求,AMS内部维护着一个ActivityStack并负责Activity的状态同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用。
  • 意外情况下会回调onSaveInstanceState 和 onRestoreInstanceState.调用时机分别在OnStop之前和OnStart之后
  • 关于恢复数据,系统首先调用Activity的OnSavaInstanceState ,然后Activity会委托Window去保存数据,Window又会委托它的顶层View DecorView去调用OnSavaInstanceState,就这样完成了从上自下的保存数据,这是一种典型的委托思想。view的绘制过程,事件分发等都采用了委托思想。

启动模式

launchMode

  • standard 标准模式,每次启动都会创建新的实例
  • singleTop 栈顶复用模式,新的Activity如果位于栈顶,则不会重新创建,会回调onNewIntent方法
  • singleTask 栈内复用模式,只要这个Activity存在就不会多次创建,自带clearTop效果。
  • singleInstance 单实例模式,只能一个人独自在一个栈中。

TaskAffinity 任务相关性,默认情况下就是包名,可以给每个Activity都指定TaskAffinity,主要和singleTask 启动模式和allowTaskReparenting属性配合使用。

Flags

  • FLAG_ACTIVITY_NEW_TASK singleTask相同作用
  • FLAG_ACTIVITY_SINGLE_TOP singleTop 相同作用
  • FLAG_ACTIVITY_CLEAR_TOP clearTop效果
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 具有这个标记的Activity不会出现在历史列表中,当我们不希望用户通过历史列表回到我们的Acitivity时这个标记有用。等同于android:excludeFromRecents="true"。

IntentFilter的匹配规则

action的匹配规则

Intent中的action和IntentFilter中的action必须能匹配上只是一个。

category的匹配规则

可以没有,有就必须每一个都和IntentFilter中的category匹配

data的匹配规则

必须要包含IntentFilter中的所有的data.分为mimeType 和 URI .