Android系统的过滤机制大揭秘——原创

Android系统的过滤机制大揭(一)

                             ——Android将军的Android自修之途

Android系统通过一些列过滤机制(ActionCategoryData)调用指定的应用程序组件。
过滤条件的设置:
窗口过滤条件首先需要从调用者和被调用者两方面考虑:
1)调用者:调用者就是通过Action调用其他程序中窗口的一端。在这一端需要使用Intent的相应方法设置ActionCategoryData,也就是设置调用的窗口要满足的过滤条件。ActionData只能指定一个(分别通过setActionsetData方法设置),而Category可以指定多个(通过addCategory方法设置)。设置完过滤条件后,通常会使用Activity.startActivity方法显示满足条件的窗口。
2)被调用者:被调用者就是如何声明被调用的窗口。在声明一个窗口类时可以不指定过滤器,也可以指定多个过滤器,每一个过滤器用<intent-filter>标签设置。
过滤器的筛选规则:
窗口类的每一个过滤器(<intent-filter>标签)都会在系统中注册,然后系统再根据Intent对象设置的过滤条件筛选符合条件的窗口时会逐一扫描这些过滤器,并会分别根据ActionCategoryData 筛选出所有符合条件的过滤器,如果这些被筛选出的过滤器属于多个窗口,系统就会显示一个选择列表,如果只属于一个窗口,就直接显示窗口。  
筛选规则主要应从两方面考虑。
1)首先应考虑ActionCategoryData在默认情况下代表什么含义。也就是在不设置这3个过滤条件的情况下,系统会如何处理。
1、不设置Action。由于Action是必选项,所以必须要设置Action,否则该窗口无法被其他的Android应用调用(同一个android应用还是可以通过显示方式调用的)。
2、不设置Category。系统会添加一个默认的Categoryandroid.intent.category.DEFAULT)。
3、不设置Data。系统会认为目标窗口不含有任何Data,也就是说如果不为Intent对象指定Data,在声明目标窗口时也不能在过滤器中使用<data>标签。否则即使ActionCategory都匹配该过滤器也不符合条件。
2)要考虑的第二个方面是ActionCategoryData如何进行匹配。系统会分别进行3次验证(分别验证这3个过滤条件),只有这3次验证都通过的过滤器才符合要求(该过滤器对应的窗口会成为候选窗口之一)。
三个过滤条件的验证规则:
1Action验证:
如果某个过滤器指定了一个或多个<action>标签(如果没有<action>标签或Intent对象未设置ActionAction验证肯定失败)。系统会扫描所有的<action>标签,如果找到与指定Action相同的<action>标签,就认为Action验证通过。
2Category验证:
Category验证采用了子集的方法,也就是说为Intent对象指定了NCategory,而在某一个过滤器中设置了MCategory,并且M>=N。那么如果NCategoryMCategory的子集,那么该过滤器通过Category验证。否则不管是 M<N,还是其他任何情况,Category验证都失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值