Android开发经验谈Android开发Android技术知识

Activity那些或许你不太清楚的事

2018-01-07  本文已影响147人  Liuzjdev

看了标题也许你会想,也许你会说,activity我天天用,我最了解不过了,没有什么是我不清楚的。你怕是在唬我吧?那下面就看看我说的这些你都了解嘛

基础知识

2、它们主要有如下不同:

2、IntentFilter的匹配规则
- action的匹配规则:要求Intent中的action存在且必须和过滤规则中的其中一个action相同,这个区分大小写,如果相同的字符串,大小写字母不同,action会匹配失败。

- category匹配规则:这个可有可无,如果有,则必须和过滤规则中的其中一个category相同,如果不写的话,在启动Activity时系统会自动加上"android.intent.category.DEFAULT"

- data可进一步分为uri(由scheme、host、port、path | pathPattern | pathPrefix这4部分组成)和mimetype。Intent的uri可通过setData方法设置,mimetype可通过setType方法设置。隐式Intent也必须指定data。同action类似,只要Intent的data只要与Intent Filter中的任一个data声明完全相同,data方面就匹配成功。需要注意的是:若Intent Filter的data声明部分未指定uri,则缺省uri为content或file,Intent中的uri的scheme部分需为content或file才能匹配;若要为Intent指定完整的data,必须用setDataAndType方法,原因请看setData和setType方法的源码:
public Intent setData(Uri data) {
    mData = data;
    mType = null;
    return this;
}

public Intent setType(String type) {
    mData = null;
    mType = type;
    return this;
}

从以上代码可以看到,setData会把mimeType置为null,setType会把uri置为null。下面我们来举例说明一下data的匹配。首先我们先来看一下Intent Filter中指定data的语法:

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

其中scheme、host等各个部分无需全部指定。假如我们为MyActivity的Intent Filter指定了如下data:

<intent-filter>
    <data android:mimeType="vidoe/mpeg" android:scheme="http" android:host="www.xxx.com" />
    <data android:mimeType="text/plain" android:scheme="http" />
</intent-filter>

那么我们的Intent想要匹配,mimeType可以为”text/plain"或“video/mpeg",scheme必须为”http“,host则没有限制,因为第二个data没有指定host。

最后

这就是我知道的关于activity的一些知识,若有叙述不清晰或是不准确的地方希望大家指出,如果你知道更多知识,欢迎给我评论,大家一起学习进步。谢谢观看

参考资料 《Android开发艺术探索》

上一篇 下一篇

猜你喜欢

热点阅读