Android读书笔记

116 阅读2分钟

Android生命周期

单Activity流程

当一个Activity创建启动时执行流程: onCreate->onStart->onResume

当Activity由可见转变为不可见时执行流程:onPause->onStop

当由不可见转变为可见时:onRestart->onStart->onResume

在还没有完全不可见时,返回当前Activity:onResume

多Activity流程

意外流程

当发生屏幕旋转等操作时,Activity会被销毁重建。并在onRestoreInstanceState方法中还原B被销毁的Activity状态

Activity的启动模式

standard

标准模式,每次启动Activity都会创建一个新的实例,并压入任务栈中。该模式下同一个Activity类的实例可能多次被压入栈。

singleTop

栈顶服用模式,每次启动Activity如果此时栈顶已有此Activity类的实例,则不会创建的对应实例,服用已有实例,并调用栈顶实例的onNewIntent方法。如果此时栈顶没有此Activity类的实例则生成对应实例压入栈顶。也就是说该模式在A->B->A->B的调用流程下,依然会每次都创建对应实例。

singleTask

栈内复用模式,每次启动时会先寻找需要压入的栈,如果存在这个栈,在寻找站内是否已有次activity的实例,如果用则复用并调用onNewIntent方法的同时弹出栈内实例顶部所有Activity,如果栈内没有对应实例则创建实例并压入栈。如果一开始没有找到对应栈,则创建一个对应的栈并压入。

singleInstance

单实例模式,当创建时系统会单独创建一个只容纳它的栈用来容纳实例,并负责后续的复用

IntentFilter的匹配规则

action的匹配规则

Activity可以拥有多条action,Intent必须含有action,并且只需有与其中一条匹配即可通过action的过滤,另外,action的匹配分大小写如果大小写不一致也会匹配失败。

category的匹配规则

Activity可以拥有多条category,Intent如果含有category,不论Intent含有几个category,每一个category都必须和Activity的category的中的一个进行匹配,如果Intent不显示加入category可以直接通过匹配,应为会默认添加android.intent.category.DEFAULT这个category,而Activity如果想可以接收隐式调用必须拥有android.intent.category.DEFAULT。

data的匹配规则

Intent必须含有data并且与Activity中的一条完全匹配