读书笔记Activity生命周期和启动
来源:互联网 发布:免费的微信多开软件 编辑:程序博客网 时间:2024/05/23 20:50
Activity:
- 生命周期
- 启动模式
- 任务栈
- 标记位
- Intent匹配规则
生命周期:
- 整个生命周期
- onCreate()---onDestory(),在onDestory()中要注意释放资源.
- 可见生命周期
- onStart()---onStop(),在前台,能与用户交互,但是没有焦点.可以在这2个方法之间保留向用户展示的资源.
- 前台生命周期
- onResume()---onPause(),能与用户交互.可能发生的很频繁.只适合做轻量级的操作.
可见生命周期和前台生命周期的区别:
可见生命周期只能看到而不能与用户发生交互.而前台生命周期可以和用户发生交互。比如A启动了一个透明的ActivityB。A是可见的,B是前台 的。B能够与用户交互而A不能。
- 生命周期图
- 异常情况下的生命周期:
- 系统配置发生改变:
与正常情况下的生命周期相比,多了2个方法onSaveInstanceState和onRestoreInstanceState方法。这2个方法分别在系统回收与创建Activity的时候调用.可以在onSaveInstanceState保存数据,在下次Activity重启的时候在onRestoreInstanceState恢复这个数据.
- 资源内存不足导致低优先级的Activity被杀死
分级
1.前台Activity2.可见但是非前台的Activity3.后台Activity,已经被暂停的Activity.系统会按照优先级从低到高回收.这种也可以使用上面的方法回收与恢复数据.怎么避免Activity被销毁重建.可以在清单文件中指定 android.configChanges="orientition|keyboardHidden"这种情况下会调用Activity的onConfigurationChanged()方法keyboardHidden:键盘的可访问性发生了改变,比如用户调出了系统键盘orientition:用户朝向发生了改变比如手机旋转了屏幕screenSize:屏幕尺寸发生了改变(Api13新添加,当target和minSdkVersion都<13不会被重启,否则就会被重启.)
任务栈:启动模式启动模式主要用来定义activity的启动方式.在清单文件中为launchMode属性.不同的启动模式有不同的行为.1.standard:2.singleTop:栈顶复用.栈顶多次调用也只会存在一个.会调用onNewIntent方法3.singleTask:栈内复用.有clearTop的效果.开启singleTask的Activity A,会先看是否存在A需要的任务栈,如果不存在,就会创建任务栈并且把A放入任务栈中(一般是打开其他应用的Activity.比如拍照,浏览器等).如果存在,先看栈中是否有A这个任务,如果有就把A上的任务弹出并且调用A的onNewIntent方法.没有就会创建A的实例并压入栈内.特殊情况:现在存在2个任务栈S1,S2.S1中有ActivityA和B.S2中有ActivityC和D,CD是singleTask的.这时B打开D.D所在的整个任务栈都会移动到S1之上.S1找那个存在ABCD四个Activity.4.singleInstance:单实例任务:栈内只会有一个该实例存在(这个同时有singleTask的效果).
TaskAffinity这个参数表示任务相关性,它是用来指定Activity运行的任务栈的.默认情况下这个参数的值就是应用的包名称.如果需要自行指定必须和singleTask或者allowTaskReparenting属性配对使用.
- 和singleTask配对使用
这种情况Activity会运行在TaskAffinity的任务栈中,任务栈的名字就是TaskAffinity的属性名.
- 和allowTaskReparenting结合
allowTaskReparenting = true的时候,当一个应用S1启动了应用S2的Activity A的时候,A是运行在S1的任务栈中,这时打开S2应用,A会被转移到S2的任务栈.
Activity的Flag
- 2种指定启动模式的区别:
清单文件中定义launchMode代码中指定addFlags指定第一种无法具有cleartop的行为,第2种无法指定singleInstance
标记位的作用有很多,可以设定启动模式,可以指定影响Activity的运行状态等.
FLAG_ACTIVITY_CLEAR_TOP:如果是和FLAG_ACTIVITY_SINGLE_TASK一起使用,会调用它的onNewIntent方法,如果是standard的启动模式,那么它与它之上的Activity都要出栈.系统会创建新的Activity实例并放入栈顶.
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:具有这个标记的Activity不会出现在历史Activity的列表中.等同于XML中指定 android:excludeFromRecents="true"
Intent匹配规则
通过隐式意图startActivity的时候,系统会为activity匹配IntentFilter,Filter中包含3个标签:action,category,data.只有通过了这3个标签的匹配,Intent才会匹配成功.清单文件中一个activity可能有多个IntentFilter,只需要匹配其中任意一个就能匹配成功.
- Action匹配规则:
action是一个字符串,用来定义这个Activity的行为.比如Android自带的`android.intent.action.VIEW"`它常用来表示查看图片.它的匹配规则是只有大小写也完全匹配的时候才能匹配成功.清单文件中必须要申明.Intent中也必须含有action.
- Category匹配规则:
category也是一个区分大小写的字符串.在清单文件中必须声明默认的category.即`android.intent.category.DEFAULT`,但是在Intent中可以不必要指定,如果没有category系统会默认为它指定`android.intent.category.DEFAULT`
- Data匹配规则:
data主要包含2个部分mimeType和URI
- mimeType:这个属性主要表示媒体类型.image/*,video/mp4文本等多媒体类型
- URI: `<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]`
content://com.example.project:200/floder/subfloder/etchttp://www.baidu.com:80/search/info
1.scheme:http,file,content等,如果URI没有指定scheme,那么整个路径是无效的.2.host:主机 ,如果没有指定,那么整个路径也是无效的.3.port:如果没有scheme和host.port单独存在是无效的.4.path,pathPrefix,PathPattern这3个都表示路径信息.* path/pathPrefix/pathPattern这3者的区别.1.path表示完整的路径2.pathPrefix表示路径的前缀信息3.pathPattern指定一个要跟Intent匹配的完整路径.但是路径中可以包含通配符 *1.*表示任意多个*之前的那个字符比如 a* 可以是aaa,也可以是aaaaaaaaaaaaaaaaa2.点跟星号的组合(.*)通配符,它可以跟任意字符串进行匹配,如.*html,可以跟abchhtml、chtml、html、dssf.html、…等字符串匹配。3.系统读取xml的时候需要转义"*"要被写成"\\*",符号'\'要被写成"\\\\"
阅读全文
0 0
- 读书笔记Activity生命周期和启动
- 读书笔记--Activity的生命周期和启动模式(一)
- 读书笔记—Activity的生命周期和启动模式
- Activity的生命周期和启动模式—-读书笔记
- 读书笔记(1) Activity的生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity生命周期和启动模式
- Activity启动流程和生命周期
- Activity生命周期和启动模式
- [状态压缩DP] HDU 1074
- 软件名称设置
- 互信息
- Scanner类 (拷贝文件内容)
- bzoj2209: [Jsoi2011]括号序列
- 读书笔记Activity生命周期和启动
- Windows使用cmd刷入recovery.img
- Android中RxJava + Retrofit完成完整网络请求
- led汇编
- android从放弃到精通 第八天 freedom
- IT的道德与伦理
- java实战项目+学习路线+学习建议
- linux安装elasticsearch部署配置详细说明
- linux命令