异常情况下acitivty生命周期,
比如在屏幕旋转的时候
onSaveInstanceState->oncrate->onRestoreInstanceState
分别执行3个方法
onSaveInstanceState在onstop方法之前调用,用来保存信息。
onRestoreInstanceState在onstart之后调用,用来取出信息,当此方法被调用的时候,bundle一定有值
很多的系统的view实现了onSaveInstanceState和onRestoreInstanceState
比如textview。当屏幕旋转的时候,textview会自动保存自己的文字,具体的源码可以在textview的onSaveInstanceState方法中看到
onSaveInstanceState保存数据的方式是委托方式,当前的acitivity会委托window保存数据,一层层传递上去,到达顶级view,在通知所有的子view保存数据
关于进程的优先级简单介绍,
前台acitivty优先级最高在然后是可见但是不是前台的activity,最后是后台的activity,同时如果一个进程没有依赖4大组件存活的话,会很快的被系统杀死,所以android推荐在server中执行后台任务,能保证进程的优先级
activity的启动模式
标准模式,standard :每次启动一个activity都会在栈内创建新的实例
栈顶复用模式,singletop:每次启动一个activity,如果该activity在栈顶,则不会创建新的实例,否则会创建
栈内复用模式,singletask:每次启动一个acitivity,如果在该栈内已经存在该activity,则不会创建新的实例,同时会将栈内已经存在的activity移入栈顶,同时移动该activity顶上所有的acitivty实例
单实例模式,singleinstance:它具有所有singletask的特性,同时还要一条新的特性,拥有该模式的acitivity只能单独的存在在一个栈中,且后续的请求都不会继续创建新的实例
activity隐式的启动, 通过intentfilter进行匹配
匹配信息有action,data,category,
action匹配规则,只要拥有任何定义的一个action,就可以启动成功
category匹配规则,intent可以没有category,因为在startactivity的时候,系统会默认的创建一个android.intent.catrgory.default,不过当intent拥有category的时候,必须和在androidmanifest中定义的category相同才能成功匹配
data匹配规则和action相同,同时多出一个type类型,比如<data android:mimetype="image/*"/>
可以通过intent.setdataandtype进行设置,必须和定义的相同才能匹配成功