安卓开发艺术探索 笔记1
2016-04-06 18:58
246 查看
最近刚买的新书,打算好好看的,平时太懒,希望这次能够克服一下这个老毛病,好记性不如烂笔头。
第一章 Activity的生命周期和启动模式
1.1 Activity 的生命周期全面分析
1.1.1 典型情况下的生命周期分析
onCreate:可以在这里做一些初始化工作
onRestart:一般当前的activity从不可见重新变为可见状态时,就会调用它
onStart:这个时候可以理解为,Activity已经显示出来了,但是我们看不到
onResume:同样Activity可见了,且显示到了前台,而onStart依旧在后台
onPause:正在停止,紧接着onstop就会被调用//可以做一些存储数据等轻量级的工作,因为onpause必须先执行完,新的activity的onresume才会执行。
onstop:表示activity即将停止,这个时候可以做作一些重量级的回收工作,同样不能太耗时
ondestory。。。
正常情况下activity的常用生命周期只有上面的七个。对于各种的切换过程其实也不难,可以自己去查阅相关资料。
onstart和onstop是从activity 是否可见的角度来回调,而on resume和on pause是从activity是否位于前台的角度来回调的,除了这个区别,在实际使用过程中也没有其他明显的区别
1.1.2 异常情况下的生命周期
情况1:资源配置发生改变导致actvity被杀死并重新创建
比如说横竖屏的变换,在默认情况下ac就会被销毁并且重新创建,当然我们也可以阻止系统重新创建文明的ac。
在默认的情况下,文明不做任何处理那么的那个系统配置发生改变时,ac就会被销毁并且重新创建。onpause,onstop,ondestory均会被调用了
因为是异常情况下的终止,所以会调用onsaveinstancestate来保存当前的ac的状态,这个方法一般在onstop之前调用,和onpause之间没有既定的时序关系
并且把保存的bundle对象作为参数同时传给onrestoreinstancestate和increate方法。所以我们可以通过这两个方法来判断ac是否被重键了,如果重建了句去取出之前保存的值,在oncareate方法里取值的时候需要判断savedinstance是否为空,而在onrestoreinstancestate里就不要。从时序上来讲,onrestoreinstancestate的调用时间是在onstart之后。
可以简单的理解,只有ac异常终止,才会调用onsavesintancestate和onrestoreinstancestate来存储和恢复数据。
情况2.资源内存不足导致低优先级的ac被杀死
ac按照优先级从高到低可以分为如下3种:
前台ac:正在和用户交互的
可见但非前台ac:比如弹出一个对话框,导致ac可见但位于后台无法和用户交互。
后台ac:已经被暂停的,比如执行onstop的,优先级最低。
上面分析了数据存储盒恢复机制,我们知道当系统配置发生改变后,ac就会被重新创建。那么有没有方法不重建呢,当然有
我们可以给ac指定configchanges属性。。。在manifest.xml文件里加入声明即可。
1.2 ac的启动模式
总共分为4种:
standard:系统的默认模式
singletop:栈顶复用模式
singletask:栈内复用模式,在这个启动模式中,我们提到了ac所需要的任务栈,这里要说到一个参数:taskaffinity可以翻译为任务相关性,标识了ac所需要的任务栈的名字,当我启动一个新的ac时候,会新建一个栈,这个栈的名字就可以以此命名。
singlesinstance:单实例模式
具体之间的区别我想大家也应该都清楚,这里就不一一赘述。面试经常会问哦。
如何给ac指定启动模式呢:
在menifest文件里:
通过在intent中设置标志位来指定,也就是i.addFlags()...
1.3 IntenFilter的匹配规则
我们知道启动ac的方式有两种,显示调用和隐式调用。
显示调用很简单,直接指定。
下面介绍一下隐式调用。
隐式调用需要intent能够匹配目标组建的intenfilter中所设置的信息。如果不匹配将无法启动目标ac。
常用的intentfilter过滤信息有action,category,data。。
1.action匹配规则
2.category匹配规则:要有默认的category声明。
3.data匹配规则:data由两部分组成,mimetype:指媒体类型,URL包含的数据就比较多了,具体可以百度查阅。默认的uri为content 和file。
如果intent要指定完整的data就必须调用setdataandtype方法,因为两个单独的方法会清除彼此。
第一章 Activity的生命周期和启动模式
1.1 Activity 的生命周期全面分析
1.1.1 典型情况下的生命周期分析
onCreate:可以在这里做一些初始化工作
onRestart:一般当前的activity从不可见重新变为可见状态时,就会调用它
onStart:这个时候可以理解为,Activity已经显示出来了,但是我们看不到
onResume:同样Activity可见了,且显示到了前台,而onStart依旧在后台
onPause:正在停止,紧接着onstop就会被调用//可以做一些存储数据等轻量级的工作,因为onpause必须先执行完,新的activity的onresume才会执行。
onstop:表示activity即将停止,这个时候可以做作一些重量级的回收工作,同样不能太耗时
ondestory。。。
正常情况下activity的常用生命周期只有上面的七个。对于各种的切换过程其实也不难,可以自己去查阅相关资料。
onstart和onstop是从activity 是否可见的角度来回调,而on resume和on pause是从activity是否位于前台的角度来回调的,除了这个区别,在实际使用过程中也没有其他明显的区别
1.1.2 异常情况下的生命周期
情况1:资源配置发生改变导致actvity被杀死并重新创建
比如说横竖屏的变换,在默认情况下ac就会被销毁并且重新创建,当然我们也可以阻止系统重新创建文明的ac。
在默认的情况下,文明不做任何处理那么的那个系统配置发生改变时,ac就会被销毁并且重新创建。onpause,onstop,ondestory均会被调用了
因为是异常情况下的终止,所以会调用onsaveinstancestate来保存当前的ac的状态,这个方法一般在onstop之前调用,和onpause之间没有既定的时序关系
并且把保存的bundle对象作为参数同时传给onrestoreinstancestate和increate方法。所以我们可以通过这两个方法来判断ac是否被重键了,如果重建了句去取出之前保存的值,在oncareate方法里取值的时候需要判断savedinstance是否为空,而在onrestoreinstancestate里就不要。从时序上来讲,onrestoreinstancestate的调用时间是在onstart之后。
可以简单的理解,只有ac异常终止,才会调用onsavesintancestate和onrestoreinstancestate来存储和恢复数据。
情况2.资源内存不足导致低优先级的ac被杀死
ac按照优先级从高到低可以分为如下3种:
前台ac:正在和用户交互的
可见但非前台ac:比如弹出一个对话框,导致ac可见但位于后台无法和用户交互。
后台ac:已经被暂停的,比如执行onstop的,优先级最低。
上面分析了数据存储盒恢复机制,我们知道当系统配置发生改变后,ac就会被重新创建。那么有没有方法不重建呢,当然有
我们可以给ac指定configchanges属性。。。在manifest.xml文件里加入声明即可。
1.2 ac的启动模式
总共分为4种:
standard:系统的默认模式
singletop:栈顶复用模式
singletask:栈内复用模式,在这个启动模式中,我们提到了ac所需要的任务栈,这里要说到一个参数:taskaffinity可以翻译为任务相关性,标识了ac所需要的任务栈的名字,当我启动一个新的ac时候,会新建一个栈,这个栈的名字就可以以此命名。
singlesinstance:单实例模式
具体之间的区别我想大家也应该都清楚,这里就不一一赘述。面试经常会问哦。
如何给ac指定启动模式呢:
在menifest文件里:
通过在intent中设置标志位来指定,也就是i.addFlags()...
1.3 IntenFilter的匹配规则
我们知道启动ac的方式有两种,显示调用和隐式调用。
显示调用很简单,直接指定。
下面介绍一下隐式调用。
隐式调用需要intent能够匹配目标组建的intenfilter中所设置的信息。如果不匹配将无法启动目标ac。
常用的intentfilter过滤信息有action,category,data。。
1.action匹配规则
2.category匹配规则:要有默认的category声明。
3.data匹配规则:data由两部分组成,mimetype:指媒体类型,URL包含的数据就比较多了,具体可以百度查阅。默认的uri为content 和file。
如果intent要指定完整的data就必须调用setdataandtype方法,因为两个单独的方法会清除彼此。
相关文章推荐
- Android4.4以上沉浸式状态栏
- 字体中英文对照
- [kuangbin带你飞]专题五 并查集
- 压缩感知重构算法之IRLS算法python实现
- 第五周项目1—三角形锥类
- 日期计算
- CNN卷积前后向推导
- [kuangbin带你飞]专题四 最短路练习
- Nginx配置一个自签名的SSL证书
- vim 查找相同行 删除向同行
- Android 项目利用 Android Studio 和 Gradle 打包多版本APK
- UISearchbar设置相关总结
- [kuangbin带你飞]专题三 Dancing Links
- vbs 脚本2
- CSS溢出实现一个图片放大的效果
- windows8.1上安装scala出现"此时不应有 \scala\bin\scala.bat"问题解决方案
- Linux 中的零拷贝技术
- HDU 4289 Control 网络流
- 面向对象设计
- 递归和动态规划