广播的类型主要分为:1.标准广播 2.有序广播
1.标准广播: 完全异步执行的广播, 发出后,所有的broadcast receiver 同时收到信息,无法被拦截 全部一起收到
2.有序广播: 同步执行的广播, 优先级高的先收到,逻辑执行完毕 再传递给下一个,可以拦截,拦截后,后面的就接收不到了 A ->B ->C
****************************************************************************************************************************************************************************************
广播的注册分为 1.动态注册 2.静态注册 广播接收器不允许开启多线程
1.动态注册 动态注册的广播一定要取消注册
新建一个类,让它继承自 BroadcastReceiver 并重写父类的onReceive()方法,并在onCreate()中调用registerReceiver()方法注册,onDestroy()中调用unregisterReceiver()取消注册
2.静态注册
在AndroidManifest中的<receiver></receiver>中注册注册内容
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true"
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/> 此为action值,启动后会发出android.intent.action.BOOT_COMPLETED,可改
</intent-filter>
然后再在此中注册权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
****************************************************************************************************************************************************************
发送标准广播:新建一个类继承BroadcastReceiver 重写 onReceive()方法,里面写一个Toast发送内容,
在AndroidManifest中的<receiver>中加入
<intent-filter>
<action android:name="aaa">
</intent-filter>
然后修改mainactivity文件,点击事件中加入
Intent intent = new Intent("aaa");
sendBroadcast(intent);
这样,所有监听了 aaa 这条广播的接收器就会接收到消息,可以是不同的软件
*************************************************************************************************************************************************
发送有序广播:广播是可以跨进程的通信方式
改动mainactivity中的sendBroadcast(),将其改为sendOrderedBroadcast(intent,null)
两个app都注册了
<intent-filter>
<action android:name="aaa">
</intent-filter>
,可以在intent-filter后面加上android:priority属性给广播设置优先级 ,数值越大,越先收到广播,
在先收到广播的app中的 onReceive()方法中写入 abortBroadcast() 可截断广播的传递
本地广播:高效,安全
使用LocalBroadcastManager来对广播进行管理
通过LocalBroadcastManager 的getInstance()方法得到一个实例,然后在注册广播接收器的时候调用LocalBroadcastManager的registerReceiver()方法
在发送广播时调用LocalBroadcastManager的sendBroadcast()方法