Android用Broadcast实现EventBus的功能和用法

以前一直用Android的广播Broadcast来实现消息传递,后来不知怎么的大家都用EventBus了。我挺奇怪的,就问别人为什么要用EventBus,给我的回答是说EventBus简单易用,消息类型明确,不会被别的应用监听到、干扰到。

我就在想,如果Broadcast也能做到这些,那么岂不是就不需要再用EventBus了?

今天闲来无事,研究了下,发现确实可以做到上面的几点,那么意味着以后就不需要引入EventBus了。

support V4包里引入了这么个工具类,叫LocalBroadcastManager 。它是个轻量级的广播,和原来的广播相比,它只能在单一进程发送接收,不会被别的应用监测到,也不会被别的应用冒充发广播干扰到。总而言之是个轻量级的广播。

那么对它进行简单的封装,就可以做到和EventBus的用法一模一样了,下面是一个登录成功的发送消息和接收消息:

/**
 * weichenglin create in 2016/3/16
 */
public class MyListener {
    private final static String ACTION_LOGIN_SUCCESS = "ACTION_LOGIN_SUCCESS";//消息类型
    private static volatile MyListener myListener = null;
    private static LocalBroadcastManager mLocalBroadcast = null;

    public static MyListener getInstance() {
        if (myListener == null) {
            synchronized (MyListener.class) {
                if (myListener == null) {
                    myListener = new MyListener();
                }
            }
        }

        if (mLocalBroadcast == null) {
            mLocalBroadcast = LocalBroadcastManager.getInstance(MyApplication.getInstance());
        }

        return myListener;
    }


    public void sendLoginMessage(Intent intent) {
        intent.setAction(ACTION_LOGIN_SUCCESS);
        mLocalBroadcast.sendBroadcast(intent);
    }

    public void registerLoginListener(BroadcastReceiver broadcastReceiver) {
        mLocalBroadcast.registerReceiver(broadcastReceiver, new IntentFilter(ACTION_LOGIN_SUCCESS));
    }

}

发送消息时这么用:

MyListener.getInstance().sendLoginMessage(new Intent().putExtra("key","value"));

接收消息时这么用:

        MyListener.getInstance().registerLoginListener(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String value = intent.getStringExtra("key");
                Log.v("tag_2","value = " + value);
            }
        });


如果以后再有别的消息,定义好消息类型,然后复制粘贴sendLoginMessage()和registerLoginListener()方法即可。是不是和EventBus用法一模一样?

===============================
如果你觉得帮到了你,请给作者打赏一口饭吃:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值