启动Activity的两种方式

启动Activity的两种方式

启动Activity分为两种,显式调用和隐式调用。两种方式的区别就不多说了。原则上一个Intent不应该同时使用两种调用,如果两种同时存在的话以显式为主。显式调用很简单,这里主要介绍隐式调用。隐式调用需要Intent能匹配目标组件的IntentFilter中所设置的过滤信息。过滤信息包括action,category,data。一个Activity可以包括多个IntentFilter,一个Intent只要能够匹配任何一组IntentFilter即可成功启动对应的Activity。

action匹配规则

action是一个字符串,系统预定义了一些action,同时我们自己也可以定义自己的action。一个过滤规则中可以有多个action,那么只要Intent中的action能够和过滤规则中的任何一个action匹配相同即可匹配成功。

category的匹配规则

category是一个字符串,系统预定义了一些category,同时我们也可以在应用中定义自己的category。Intent可以没有category,但是如果你一旦有category,不管有几个,每个都要能够和过滤规则中的任何一个相同。系统在调用startActivity或者startActivityForResult的时候会默认为Intent加上“android.intent.category.DEFAULT”这个category,为了我们的Activity能够接收隐式调用,就必须在intent-filter中指定“android.intent.category.DEFAULT”这个category。

data的匹配规则

data的匹配规则和action类似,data的结构稍微有点复杂。

<data android:mimeType="video/mpeg" android:scheme="http://abc"/>

data由两部分组成,mimeType和URI。mimeType指媒体类型,而URI中包含的数据就比较多了。

隐式方式启动一个Activity的时候,需要判断是否有匹配的隐式Activity。

判断方法有两个

  1. PackageManager 的 resolveActivity方法
  2. Intent 的 resolveActivity方法

你可能感兴趣的:(android)