【问题汇总】BroadcastReceiver静态内部类注册的问题

时间:2022-11-18 23:18:58

正常情况下,静态注册广播使用如下方式:

<!-- 注册自定义静态广播接收器 -->
<receiver android:name=".StaticReceiver">
<intent-filter>
<action android:name="com.bn.pp2.staticreceiver" />
</intent-filter>
</receiver>

这样静态注册的广播,就算app的进程没有开启,或者app没有启动过。只要intentfilter匹配了com.bn.pp2.staticreceiver,就会执行StaticReceiver的onReceiver方法。

另外,还有一种静态注册的方法,使用静态内部类。

<!-- 注册自定义静态内部广播接收器 --><receiver android:name=".Outerclass$StaticInnerReceiver"><intent-filter><action android:name="com.bn.pp2.staticreceiver" /></intent-filter></receiver>
这里,需要注意$的使用。但是,使用这种方式会带来一个问题:如果app的进程不存在,StaticInnerReceiver的onReceive根本不会被调用。