activity的启动分为显式调用和隐式调用。显式调用需要明确指定组件的信息,来完成调用。。隐式调用是通过匹配目标组件的IntentFilter完成的。一个组件可以设置多个IntentFilter来匹配。IntentFilter中的过滤信息有action、category、data组成。只有一个Intent同时匹配action类别,category类别,data类别才算完全匹配,才能启动对应的组件。一个intent只需要匹配任何一组intentFilter就可以启动对应组件。下面一一讲解对应的匹配规则。
一、action的匹配规则
action是一个字符串,一个过滤规则(intentFilter)可以有多个action。一个IntentFilter必须有一个action,如果没有那么则匹配失败。多个action只要匹配成功一个即可匹配成功,
结论:
Intent中的action必须存在且必须和过滤规则中的其中一个action相同(字符串值完全一样,区分大小写)
二、category的匹配规则
category是一个字符串,Intent可以没有category,但是如果一旦有category,不管有几个,每一个都要能够和过滤规则中的任何一个category相同。简而言之,Intent中携带Category要全部能和IntentFilter中的Category匹配。
注意:
系统在调用startActivity或者startActivityForResult时,会默认为Intent添加“android.intent.category.DEFAULT"这个category。
所以隐式启动的组件必须包含
如果Intent中的存在category,那么这些category都必须和Activ