Activity的生命周期和启动模式—-读书笔记
Activity的生命周期分析
Activity的生命周期
1.onCreate:表示Activity正在被创建
2.onRestart:表示Activity正重新启动
3.onStart:表示Activity正被启动
4.onResume:表示Activity已经可见
5.onPause:表示Activity正在停止
6.onStop:表示Activity即将停止,不可见
7.onDestory:表示Activity即将被销毁
Tips
1.新Activity是透明主题时,旧Activity不会走onStop
2.Activity切换时,栈顶的Activity的onPause会先执行,然后才会启动新的Activity
3.Activity在异常情况下被回收时,onSaveInstanceState方法会被回调,回调时机是在onStop之前,当Activity被重新创建的时候,onRestoreInstanceState方法会被回调,时序在onStart之后
4.保存和回复View层次结构,系统的工作流程:首先Activity被意外终止,Activity会调用onSaveInstanceState去保存数据,然后Activity会委托Window去保存数据,接着Window再委托它上面的顶级容器去保存数据。最后顶级容器一一通知它的子元素来保存数据。
5.接受保存数据的位置可以是onRestoreInstanceState或onCreate。二者区别:onRestoreInstanceState一旦被调用,参数Bundle savedInstanceState一定有值,不用判断是否为空,而onCreate则需要判断。建议使用onRestoreInstanceState方法。
6.标识Activity任务栈名称的属性(主要和singleTask启动模式或者allowTaskReparenting属性配对使用):TaskAffinity,默认为应用包名
Activity的启动模式
Activity的LaunchMode
1.standard 系统默认。每次启动会重新创建新的实例,谁启动了这个Activity,这个Activity就在谁的栈里。
2.singleTop 栈顶复用模式。若该Activity在栈顶,则onNewIntent方法会被回调,onCreate和onStart并不会被调用。否则新Activity任然会被重新创建。
3.singleTask 栈内复用模式。只要该Activity在一个栈中存在,都不会重新创建,onNewIntent会被回调。如果不存在,系统会先寻找是否存在需要的栈,如果不存在该栈,就创建一个任务栈,然后把这个Activity放进去;如果存在,就会创建到已经存在的这个栈中。singleTask默认具有clearTop的效果。
4.singleInstance。具有此种模式的Activity只能单独存在于一个任务栈。
Activity的Flags
1.FLAG_ACTIVITY_NEW_TASK :为Activity指定“singleTask”启动模式
2.FLAG_ACTIVITY_SINGLE_TOP :为Activity指定“singleTop”启动模式
3.FLAG_ACTIVITY_CLEAR_TOP:在同一任务栈所有位于它上面的Activity都要出栈
4.FLAG_ACTIVITY_EXCLUDE_FROM_RECENT :该Activity不会出现在历史Activity列表中等同于xml中指定Activity的属性android:excludeFromRecents=“true”
IntentFilter匹配规则
1.action匹配规则:要求intent中的action 存在 且 必须和过滤规则中的其中一个相同 区分大小写;
2.category匹配规则:系统会默认加上一个android.intent.category.DEAFAULT,所以intent中可以不存在category,但如果存在就必须匹配其中一个;
3.data匹配规则:data由两部分组成,mimeType和URI,要求和action相似。如果没有指定URI,URI但默认值为content和file(schema)