Android中广播的使用

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: "+"收到广播");
    }
}

猜你喜欢

转载自blog.csdn.net/hzkcsdnmm/article/details/107614229
今日推荐