1.动态广播和静态广播
静态广播
需要在AndroidManifest.xml文件中配置
,具有常驻性广播,无论程序启动与否,广播依然存在
的特点。比如:我们可以接收开机的广播,当收到这条广播时就可以在 onReceive()方法里执行相应的逻辑,从而实现开机启动的功能。
动态广播
代码中动态指定广播地址并注册,具有非常驻型,广播会跟随程序的生命周期的结束而结束
的特点。需要特别注意的是:需要在onCreate()
中进行注册,在onDestroy()
中进行注销。
2.有序广播和标准广播
有序广播
是一种同步执行的广播,在广播发出去之后,同一时刻只有一个广播接收器可以收到消息。当广播中的逻辑执行完成后,广播才会继续传播。
标准广播
是一种异步的方式来进行传播的,广播发出去之后,所有的广播接收者几乎是同一时间收到消息的。他们之间没有先后顺序可言,而且这种广播是没法被截断的。
3.全局广播和本地广播
全局广播:
全局广播的意思就是发出的广播可以被其他任意的应用程序接收,或者可以接收来自其他任意应用程序的广播。
本地广播:
本地广播则是只能在应用程序的内部进行传递的广播,广播接收器也只能接收内部的广播,不能接受其他应用程序的广播
4.代码
参数准备
public static final String BROADCAST_ACTION="com.test.TestBroadcast";
private TestBroadcastReceiver receiver;
private TempReceiver receiver2;
private LocalBroadcastManager localBroadcastManager;
注册广播,这里我以两个接受器为例,注意在oncreate中调用
private void registerBroadcast(){
IntentFilter filter=new IntentFilter();
filter.addAction(BROADCAST_ACTION);
receiver=new TestBroadcastReceiver();
receiver2=new TempReceiver();
localBroadcastManager=LocalBroadcastManager.getInstance(this);
localBroadcastManager.registerReceiver(receiver,filter);
localBroadcastManager.registerReceiver(receiver2,filter);
}
发送方:
在Activity中顶一个button的点击事件然后在点击事件中写入,根据自己的需要选择不同类别广播,我这里选择本地标准广播
Intent intent=new Intent(DATA_REFRESH_BROADCAST_ACTION);
//sendBroadcast(intent);//发送标准广播
//sendOrderedBroadcast(intent,null);//发送有序广播
localBroadcastManager.sendBroadcast(intent);//发送本地标准广播
//localBroadcastManager.sendBroadcastSync(intent);//发送本地有序广播
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(receiver);//注销本地广播
localBroadcastManager.unregisterReceiver(receiver2);
}
接收方:
public class TestBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("receiver", "onReceive: "+"收到广播");
}
}
public class TempReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("receiver2", "onReceive: "+"收到广播");
}
}