Android艺术开发探索阅读笔记第一章

1.1 Activity生命周期全面分析
(1)onstart和onstop、onResume和onPause从描述上来说差不多,本质的区别在于:onstart和onstop是Activity是否可见,onResume和onPause是Activity是否位于前台也就是是否正在与用户交互;
(2)Activity A启动Activity B生命周期的变化  A onPause ->B onCreat -> B onstart -> B onResume -> A onstop 通过源码可知,在A的onPause执行后才会创建Activity B

  (3)  系统只在Activity异常终止的时候才会调用onSaveInstanceState与onRestoreInstanceState来储存和恢复数据,其他情况不会触发这个过程。但是按Home键或者启动新Activity仍然会单独触发onSaveInstanceState的调用。

   (4)  onSaveInstanceState(Bundle outState) 这个方法调用时机在onstop之前,onRestoreInstanceState(Bundle savedInstanceState)在onstart之后只要调用次函数的参数一定有值,oncreat中的bundle不一定有值

1.2 Activity的启动模式

(1)standard模式下,谁启动的这个Activity那这个Activity就运行在那个启动它的Activity所在的栈中,所以在standard模式下用ApplicationContext启动的Activity会报错,因为没有任务栈放新的Activity,解决办法新建一个任务栈把新建的
Activity放进去:用flag_activity_new_task
(2)singletop模式下,如果复用栈顶的Activity复用时生命周期会从onNewintent开始然后onstart
(3)当一个具有singletask模式的Activity请求启动后,比如Activity A系统首先会寻找是否有A想要的任务栈,如果没有,就重新创建一个任务栈,然后创建A的实例把A放到栈中。如果存在A所需的任务栈,这时要看A是否在栈中有实例存在,如果有实例存在,那么系统会清空任务栈中A上面的Activity,并且调用A的onNewintent方法复用A,如果实例不存在就把A压入栈中。
(4)singleInstance模式下的Activity,系统会单独给他建一个任务栈,整个系统中只有一个实例,如果它存在其他Activity启动它,会直接复用

(5)注意:如果启动的是Standard模式的Activity无论它是哪个应用的(想要哪个taskaffinity属性的任务栈)都会压入启动它的Activity所在的栈中

如果启动的是其他应用的Singletask模式的Activity,如果被启动的Activity所在的应用没有启动就是没有自己的任务栈,它会创建一个任务栈并且压入这个任务栈(这就是第(3)条所说的A想要的任务栈)

如果启动的是其他应用的Singletask模式的Activity,如果被启动的Activity所在的应用启动了在后台就是有自己的任务栈,他会先检查这个任务栈中有没有这个Activity有就把这个Activity上面的Activity都清掉然后复用这个Activity,如果这个任务栈中没有这个Activity就创建后压入这个栈中

(6)taskaffinity这个参数标识了一个Activity所需要任务栈的名字,默认情况下所有Activity所需要的任务栈的名字为应用的包名,我们也可以为每个Activity都单独指定taskaffinity属性,这个属性必须不能可包名相同,否则相当于没有指定,并且这个属性的值的类型为字符串,这个字符串必须包含"."

1.3 IntentFilter的匹配规则

(1)action的匹配规则:action区分大小写,intent中必须有一个action且这个action能和过滤规则中的任何一个action相同即可匹配成功

(2)category的匹配规则:如果intent中出现了category,所有的category必须是过滤规则中已经定义的category才能匹配成功,也可以不设置category也能匹配,因为系统在调用startactivity或者startActivityforresult的时候回自动给intent加上"android.intent.category.DEFAULT",同时为了我们的Activity能够接收到这个隐式调用,就必须在intent-filter中指定这个"android.intent.category.DEFAULT"category。

(3)data的匹配规则,如果过滤规则中定义了data,那么intent中也必须定义可匹配的data,intent中的data和过滤规则中的任何一个data相同即可匹配成功


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值