Android艺术探索学习笔记:第一章 Activity的生命周

2017-05-15  本文已影响0人  Android绝世小菜鸟

目录

1.Activity的生命周期全面分析

2.Activity的启动模式

3.IntentFilter的匹配规则

1.Activity的生命周期全面分析

1.1 典型情况下的生命周期分析
Paste_Image.png
1.2 异常情况下生命周期分析

2 Activity的启动模式

2.1Activity的LaunchMode

1.四种启动模式:

2.TaskAffinity

参数TaskAffinity用于指定Activity栈的名字,所有Activity所需的任务栈的名字为应用的包名,singleTask的站名必须不能和包名一样。TaskAffinity属性经常和singleTask启动模式或allowTaskReparenting属性配对使用,其他情况没有意义。当应用A启动了应用B的某个Activity后,如果这个Activity的allowTaskReparenting属性为true的话,那么当应用B被启动后,此Activity会直接从应用A的任务栈转移到应用B的任务栈中。

3.Activity启动模式设置

<activity
   android:name=".MainActivity"
   android:launchMode="singleTask" />

 Intent intent = new Intent(this,MainActivity.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);

第二种方式的优先级高于第一种,如果都设置了只有第二种会生效。第一种方式无法直接为Activity  
设置FLAG_ACTIVITY_CLEAR_TOP标记,而第二种方式无法为Activity指定singleInstance模式。
2.2 Activity的Flags

3.IntentFilter的匹配规则

IntentFilter的过滤信息有action、category、data。为了匹配过滤列表,需同时匹配过滤列表中的action、category、data信息,否则匹配失败;一个Activity中可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter即可成功启动对应的Activity。

必须含有,至少匹配一个,可以多个,区分大小写

可以不指定,有个默认的“android.intent.category.DEFAULT”,如果Intent中定义了,则所有都必须和过滤规则中的一一对应。

必须含有,至少匹配一个,可以多个,区分大小写

1.data介绍

data由两部分组成,mimeTypeURI。mimeType是指媒体类型,比如image/jpeg、audio/mpeg4-generic和video/等,可以表示图片、文本、视频等不同的媒体格式,而URI中包含的数据就比较多了,下面是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中没有指定scheme,那么整个URI的其他参数无效,也意味着URI是无效的。
Host:URI的主机名,比如www.baidu.com,如果host未指定,那么整个URI中的其他参数无效,也以为着URI无效。
Port:URI中的端口号,比如80,仅当URI中指定了scheme和host参数的时候port参数才是有意义的。
Path、pathPattern和pathPrefix:这三个参数都是表示路径信息;
      path表示完整的路径信息;
      pathPattern也表示完整路径信息,但是它里面可以包含通配符“”,“”表示0个或多个任意字符;
      pathPrefix表示路径的前缀信息。
2.匹配:
1.要求Intent中必须含有data数据,并且data数据能够完全匹配过滤规则中的某一个data;  
    这里的完全匹配是指过滤规则中出现的data部分也出现在了Intent中的data中。
2.如果没有指定URI,是有默认值的,URI的默认值为content和file。也就是说,虽然没有指定URI,
但Intent中的URI部分的schema必须为content或者file才能匹配。
3.如果要为Intent指定完整的data,必须调用setDataAndType方法,不能先调用setData再调用setType,因为这两个方法都会清除对方的值。
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
上一篇下一篇

猜你喜欢

热点阅读