(1)生命周期要点
一.典型情况下:
(1)onCreat:
主要做一些初始化工作,如
加载配置布局
管理fragment
对activity之前的状态进行恢复(如果存在)
最后调用application的dispatchActivityCreated方法进行创建管理
(2)onRestart:
当activity由不可见重新到可见状态会调用onRestart
主要工作就是将一个boolean变量mCalled置为true
(3)onStart:
activity可见但不可交互
设置一些状态标志位和参数
处理一些Fragment的操作
(4)onResume:
已经可见并可以与之交互
置于前台
(5)onPause:
正在停止,可见但不可交互
可以做一些停止动画,数据存储的操作,不应耗时太多
( 6 ) onStop :
即将停止
可以做一些稍微重量级回收操作,仍然不建议太过耗时
( 7 ) onDestory:
即将被销毁
回收工作,资源释放
二.特殊情况(配置改变或者被杀死导致activity重新创建)
会调用onSaveInstanceState方法来保存activity当前状态,可以通过重写该方法来做一些状态或数据的保存,在onCreat或onRestoreInstance中获取我们保存的信息。注意在onCreat中要进行判空处理,后者不需要,因为onRestoreInstance只要执行了,其中的值一定会存在。
如果一个进程中没有四大组件在执行,那么此进程很快就会被杀死,所以进行后台工作处理的时候,应尽量放在service中进行,因为service有一定的优先级,能够保证任务顺利的进行。
通过对acctivity的android:configChanges属性进行配置,可以决定当那些配置改变的时候activity不会被重新创建。(如横竖屏的切换)
(2)启动模式要点
一.四种启动模式
standard:依次入栈,返回弹出,栈顶呈现于前台
singleTop:若栈顶存在请求启动的activity,则复用此activity,回调onNewIntent方法。若不在栈顶或者不存在于栈中,则新建实例入栈。
singleTask:若栈中存在该实例,则该实例置顶,上方的activity全部弹出,回掉onNewIntent方法。若不存在,则新建实力入栈。若请求栈不存在,则先创建栈,在创建实例入栈。
singleInstancce:新建栈只存储该单一实例,后续创建该activity将不会产生新的实例。若创建其他activity则回到旧站或新建栈。
二.其他相关点
activity所需要的栈的名字由参数TaskAffinity标识,默认为该activity所在应用的包名。我们可以为每个activity的TaskAffinity指定不同的值来确定它需要的栈,但是该值不能于包名相同。
指定启动模式的两种方式:在AndroidMenifest中指定,也可以在Intent中设置标志位来指定其启动模式。
后者优先于前者。作用范围差异:前者无法为其指定FLAG_ACTIVITY_CLEAR_TOP标志,后者无法为其设定singeInstance启动模式。
三.intentFilter的匹配规则(匿名启动)
action: action存在且必须与过滤规则中的一个相同,action区分大小写。
category:可以不存在,但若存在,则每条category必须存在于过滤规则中。
data:必须存在且完全匹配过滤规则中的某一条