一、Activity的生命周期

Activity生命周期

1.onStart和onResume、onPause和onStop从描述上来看差不多,对我们来说有什么实质的不同呢?

从实际的使用过程来说,onStart和onResume、onPause和onStop看起来的确差不多,这两个配对的回调分别代表不同的意义,onStart和onStop是从Activity是否可见这个角度来回调的,而onResumeheonPause是从Activity是否位于前台这个角度来回调的,除了这种区别,在实际的使用中没有其他明显的区别。

2.假设当前的Activity为A,如果这个时候用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?

当启动一个新的Activity的时候,旧的Activity的onPause会先执行,然后才会启动新的Activity。所以Activity的onPause不能做耗时操作,尽量在onStop里面处理。

3.异常情况下的Activity的生命周期?

系统配置发生改变,Activity会被销毁,其onPause,onStop,onDestroy均会被调用,同时由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前的Activity的状态。这个方法的调用时机是在onStop之前,它和onPause没有既定的时序关系,当Activity被重新创建的后系统会调用onRestoreInstanceState和onCreate方法来判断Activity是否被重建了,从时序上来说,onRestoreInstanceState的调用时机在onStart之后。

4.系统配置发生改变Activity不重新创建?

给Activity指定android:configChanges=”orientation”如果要指定多个值可以使用 | 连接起来。
意义:
locale 本地位置发生了改变,一般指切换了系统语言
keyboardHidden键盘的可访问性发生了变化,比如用户调出了键盘
orientation:屏幕方向发生了变化,这个是最常用的,比如旋转了手机屏幕
screenSize:当屏幕的尺寸信息发生了变化,当旋转设备屏幕的时候,屏幕尺寸会发生变化,这个比较特殊,当编译选项的miniSdkVersion和targetSdkVersion均低于13时,次选项不会导致Activity重启。

5.Activity的Flags?

Intent.FLAG_ACTIVITY_NEW_TASK
singTask启动模式
FLAG_ACTIVITY_SINGLE_TOP
singleTop启动模式
FLAG_ACTIVITY_CLEAR_TOP
位于它上面的Activity都要出栈
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
不会出现在历史Activity列表中

6.Intent-Filter匹配规则?

为了匹配过滤列表,需要同时匹配过滤列表中的action,category,data信息,否则,匹配失败
action匹配规则:
action的匹配规则是Intent中的action必须能和过滤规则中的某个action一模一样,即是字符串一模一样。
category匹配规则:
如果有category,category必须是已经在过滤规则中定义了的。可以没有,因为启动Activity的时候默认为Intent添加了一个”android.intent.category.DEFAULT”,所以为了我们的Activity能够接收到隐式调用,必须在Intent-Filter中指定”android.intent.category.DEFAULT”这个Category。
data的匹配规则:
如果过滤规则中定义了data那么,Intent中也必须定义一样的data。
data的结构:

<data
android:scheme="string"
android:host="string"
android:port="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:mimeType="string"
/>

data由两部分组成,mimeType和URI。mimeType是值媒体类型,比如image/jepg,audio/mpeg4-generic和video/*等,可以表示图片,文本,视频等不同格式的媒体格式。
URI结构:

<scheme>://<host>:<port>/[path]|[pathPrefix]|[pathPattern]

例如:

content://com.example.project:200/folder/subfolder/etc
http://www.baidu.com:80/search/info

Scheme:URI的模式,如http,file,content,如果没有指定这个则URI无效。
Host:URI的主机名,没有指定则URI无效。
Port:URI的端口号,只有scheme和host参数有效port才有意义。
Path,pathPattern和pathPrefix:路径信息。
例子:

<intent-filter>
<data android:mimeType="image/*" />
...
</ intent-filter>

指定了mimeType为图片类型,这个过滤规则虽然没有指定URI,但是却有默认的值,URI的默认值为content和file,所以Intent的URI必须指定为content或者file才能匹配。
可以写:

intent.setDataAndType(Uri.parse("file://abc"),"image/png");

通过隐式方式启动Activity的时候,可以使用PackageManager或者Intent的resolveActivity方法,如果找不到返回null,PackageManager还提供了queryIntentActivities方法,这个返回所有匹配的Activity信息。
resolveActivity(Intent intent, int flags);
第二个参数使用MATCH_DEFAULT_ONLY这个标记位,表示仅仅匹配,Intent-Filter里面android.intent.category.DEFAULT这个Category的Activity,因为不包含DEFAULT这个Category的是不能接收隐式Intent的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值