LocalBroadcastManager发送本地广播

一、知识点准备

LocalBroadcastManager类,该类用来注册和发送本地广播,所谓本地广播就是指在同一个process中运行的app,一般一个应用就是一个app,所以一般情况下你就认为其只是在同一个app中发送和接受的广播。要注意的是,广播接收着的onReceive是运行在主线程中的,所以不能在其中处理耗时的操作。本地广播只能通过动态的方式注册,如果使用静态注册是无法接收到广播的。LocalBroadcastManger的原理是把注册的广播接受者和其过滤器都存在一个map集合中,当接收到广播,也就是调用其sendBroadCast方法的时候,再遍历集合,从中找到匹配的接受者然后调用接受者的onReceive方法。这里有一个问题就是如果不是同一个实例那么就无法保证正常的运行,所以查看其没有发现其使用的是懒汉式的单例设计模式。其主要方法有下面几个:registerReceiver、unregisterReceiver、sendBroadcast、sendBroadcastSync,观察名字就知道是干嘛的,最后一个方法只是发送了一个同步的广播,也就是说要等广播接受者处理完intent才能往下执行。获取LocalBroadcast实例的方式是调用其getInstance方法,观察这个名字你就知道其为单例啦。



二、示例代码演示

我们在布局文件中有3个按钮,效果图如下:


ok,3个按钮的点击事件我们在布局文件中通过onClick指定,然后我们看下activity中的代码:

public class MainActivity extends AppCompatActivity {

    private LocalBroadcastManager localBroadcastManager;
    private MyBroadCastReceiver broadCastReceiver;
    public static final String BRAODCASTACTION = "com.xinxue.LOCALBROADCAST";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
        broadCastReceiver = new MyBroadCastReceiver();
    }

    public void registerBroadCast(View view) {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(BRAODCASTACTION);
        localBroadcastManager.registerReceiver(broadCastReceiver, intentFilter);
    }

    public void unRegisterBroadCast(View view) {
        localBroadcastManager.unregisterReceiver(broadCastReceiver);
    }

    public void send(View view) {
        localBroadcastManager.sendBroadcast(new Intent(BRAODCASTACTION));
    }
}

扫描关注我的微信公众号:


这就是静态广播的使用方式啦,是不是很简单呢?以后需要本地广播就这样使用吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值