广播是Android四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),在开发中应用广泛,下面是开发过程中对广播相关知识的总结。
1、广播的原理
2、广播的注册
3、广播的分类
1、广播的原理
广播接收器有两个端,一个是发送端,一个是接受端,整个框架是订阅模式。当调用接口发送广播消息后,AMS会将该消息转发给所有i监听该消息的接受端。(注:ActivityManagerService管理所有的四大组件,可深入看一下源码。)
广播接收器原理图
2、广播的注册
根据广播接受器的原理,首先看一下广播接收器的注册过程。广播的注册有两种方式:
1.静态注册
2.动态注册
2.1 静态注册
·注册方式:在AndroidManifest.xml中通过标签注册。
·静态注册个属性详解
<receiver
android:enabled="true" | "false"
// 此BroadcastReceiver能否接收其他APP发出的广播
// 如果是true,则是个本地广播接收器,只能接收本APP进程内的广播
// 默认值是由Receiver中有误intent-filter决定的,如果有intent-filter,默认值是true,否则是false
android:exported="true" | "false"
android:icon="R.drawable.ic_boradcast"
android:label="R.string.label_broadcast"
// 需要在src下新建文件TestBroadcastReceiver,并继承自BoradcastReceiver
android:name=".TestBroadcastReceiver"
// 具有相应权限的广播发送者发送的广播,才能被此BroadcastReceiver所接收
android:permission="string"
// 指定BroadcastReceiver运行所处的进程
// 默认是APP的进程,也可以指定独立的进程
android:process="string" >
<intent-filter>
<action android:name="com.broadcast.change"/>
</intent-filter>
</receiver>
·代码示例
<receiver
android:name=".TestBroadReceiver" >
<intent-filter >
<action android:name="com.broadcast.change" />
</intent-filter>
</receiver>
同时,Java文件还需要实现该广播接收器。
public class TestBroadReceiver extends BroadcastReceiver {
private