从实际的使用过程来说,onStart和onResume、onPause和onStop看起来的确差不多,这两个配对的回调分别代表不同的意义,onStart和onStop是从Activity是否可见这个角度来回调的,而onResumeheonPause是从Activity是否位于前台这个角度来回调的,除了这种区别,在实际的使用中没有其他明显的区别。
当启动一个新的Activity的时候,旧的Activity的onPause会先执行,然后才会启动新的Activity。所以Activity的onPause不能做耗时操作,尽量在onStop里面处理。
系统配置发生改变,Activity会被销毁,其onPause,onStop,onDestroy均会被调用,同时由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前的Activity的状态。这个方法的调用时机是在onStop之前,它和onPause没有既定的时序关系,当Activity被重新创建的后系统会调用onRestoreInstanceState和onCreate方法来判断Activity是否被重建了,从时序上来说,onRestoreInstanceState的调用时机在onStart之后。
给Activity指定android:configChanges=”orientation”如果要指定多个值可以使用 | 连接起来。
意义:
locale 本地位置发生了改变,一般指切换了系统语言
keyboardHidden键盘的可访问性发生了变化,比如用户调出了键盘
orientation:屏幕方向发生了变化,这个是最常用的,比如旋转了手机屏幕
screenSize:当屏幕的尺寸信息发生了变化,当旋转设备屏幕的时候,屏幕尺寸会发生变化,这个比较特殊,当编译选项的miniSdkVersion和targetSdkVersion均低于13时,次选项不会导致Activity重启。
Intent.FLAG_ACTIVITY_NEW_TASK
singTask启动模式
FLAG_ACTIVITY_SINGLE_TOP
singleTop启动模式
FLAG_ACTIVITY_CLEAR_TOP
位于它上面的Activity都要出栈
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
不会出现在历史Activity列表中
为了匹配过滤列表,需要同时匹配过滤列表中的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的。