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中的一条完全匹配