先把结论放在前面:Intent 是"通信信封",IntentFilter 是"收件人声明的筛选规则",系统靠 action、category、data 三组匹配决定是否投递。分水岭在于两件事能不能讲清:①隐式 Intent 必须至少匹配一个 category,且CATEGORY_DEFAULT是系统隐式加上的;②PendingIntent是"待执行的 Intent",它的身份靠requestCode+Intent.filterEquals决定,而不是靠引用相等。
Intent 与 IntentFilter 面试官最爱问三个层次:是什么、为什么、怎么用。这篇按这个顺序拆开讲。
匹配规则:三组条件的实际语义
系统匹配 Intent 与 IntentFilter 的规则,看起来简单,实际有三个反直觉点。
第一,action要"有交集",category要"被包含"。具体规则是:Intent 的 action 集合与 Filter 的 action 集合有任一相同即算 action 匹配;Intent 的 category 集合必须包含Filter 声明的每个 category。而startActivity调用时系统会隐式给 Intent 加上