Android开发艺术探索--第一章Acitivity的生命周期和启动模式

第一章

1.1.1 典型情况下的生命周期

A跳到B:A.onPause-B.onCreate-B.onStart-B.onResume-A.onStop


1.1.2 异常状态下的生命周期

情况一:资源相关配置发生改变导致Activity被杀死并重建

activity异常终止系统会调用onSaveInstanceState来保存当前状态,调用时机是在onStop之前,但是和onPause没有既定的时序关系。

当Activity被重新创建后会调用onRestoreInstanceState,并且会把onSaveInstanceState时保存的bundle作为参数同时传递给onRestoreInstanceState和onCreate。onRestoreInstanceState调用时机是在onStart之后。

系统只有在Activity异常终止的时候才调用onSaveInstanceState和onRestoreInstanceState,其他情况不会触发这个过程

PS:android:configChanges声明该属性当配置发生变化时系统不会让Activity重启。

     SDK>=13旋转屏幕不重启需要设置orientation和scrennSize,<13只需要orientation


情况二:资源内存不足导致低优先级的Activity被杀死


1.2 Activity的启动模式


1.3IntentFilter的匹配模式

1.Action的匹配规则:Intent中的Action存在且必须和过滤规则中的其中一个action相同。

2.Category匹配规则:如果Intent中有category,不管有几个,必须被过滤规则中的category包含。

                                        如果没有category,Intent也会被匹配,因为系统默认会加入android.intent.category.DEFAULT。同理如果activity要被隐式调用,必须在IntentFilter中加入android.intent.category.DEFAULT。

3.Date的匹配规则:和 Action类似,如果过滤规则定义了data,Intent中必须定义可匹配的Data。

   URI=<Scheme>://<Home>:<port>/[<path>]

   Scheme:http,file,content(默认值为file和content),如果没指定该值则uri无效

   Host:如果没指定该值则uri无效

   Port:仅当指定了Scheme和Host才有效



当通过隐式的方式启动一个Activity,要判断系统能不能匹配到期望的Activity,判断方法有两种:

public abstract List<ResolveInfo> queryIntentActivities(Intent intent,int flags)

public abstract ResolveInfo resolveActivity(Intent intent,int flags)

第二个参数要注意要使用MATCH_DEFAULT_ONLY这个标记位,表示仅仅匹配intent-filter中声明了<category android:name="android.intent.category.DEFAULT"/>的Activity。从而防止虽然上述两个方法返回的不是NULL,但是真正启动时仍然会出错。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值