分为标准广播(Normal broadcasts)和有序广播(Ordered broadcasts)java
标准广播(Normal broadcasts):效率比较高,没法拦截。全部的广播接收器同时接收到。发送时调用sendBroadcast()方法android
有序广播(Ordered broadcasts):优先级高的先接收到广播,能够进行拦截,也能够顺序传递下去。发送时调用sendOrderedBroadcast()方法。安全
直接在AndroidManifest.xml进行注册spa
例如:.net
<receiver android:name=".broadcastTest.BootReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
代码中调用registerReceiver(receiver,intentFilter)进行注册线程
代码中调用unregisterReceiver(receiver)进行注销code
receiver参数为自定义receiver的对象,intentFilter参数为IntentFilter类的对象orm
继承BroadcastReceiver类,实现onReceive方法。而后进行注册xml
在onReceive方法中,不容许开启线程,不能够运行耗时操做,不然会进行报错。因此接收器更多的是扮演一种能够打开程序其余组件的角色。对象
实现方式和标准广播同样。注册的时候,设置priority属性
能够在优先级高的receiver中,调用abortBroadcast();阻止广播继续往下传递。
实现方式与标准广播同样。注册和注销的时候须要调用LocalBroadcastManager来对广播
注意:本地广播是不能够经过静态注册的方法来接受的
本地广播的优势:
a、能够明确知道发送的广播不会离开咱们的程序,所以不担忧数据泄密。
b、其余程序没法将广播发送到咱们程序内部,所以不须要担忧会有系统安全漏洞。
c、发送本地广播会比全局广播更加高效。
参考地址:https://blog.csdn.net/fengyuzhengfan/article/details/38439221
系统全部的广播,在sdk/platforms下面,全部的android版本中有一个data文件夹,文件夹下面有一个broadcast_actions.txt的文件。
例如:sdk\platforms\android-28\data\broadcast_actions.txt
官网中比较详细的讲解:
https://developer.android.com/reference/android/content/Intent
https://www.kancloud.cn/bodhixu/broadcast/276505