EventBus的使用及接收消息的四种模式介绍

使用EventBus很久了,一直都没有写一篇与EventBus有关的博客,自己平时用但很多时候还经常忘记一些细节,所以今天写篇博客方便自己记忆一下,大神勿喷! 看这内容,您最好有个现成的EventBus的使用项目,不然看也没有眉目。
一、EventBus的使用
1.在需要接受消息的类里面,对EventBus进行注册。
EventBus.getDefault().register(this);

2.为了防止内存泄漏和遗忘,在该类的OnDestory()方法里面对EventBus进行解注册。
@Override
protected void onDestroy() {
super.onDestroy();
//结尾要进行解注册
EventBus.getDefault().unregister(this);
}

3.创建发送消息类
创建用到的一个类,里面声明属性,并创建够着方法和get\set方法。
public class FirstEvent {

private String mMsg;

/*
创建该类的构造器
 */
public FirstEvent(String mMsg) {
    this.mMsg = mMsg;
}

public String getmMsg() {
    return mMsg;
}

}

4.在发送消息类里面发送消息

    btn_second.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EventBus.getDefault().post(new FirstEvent("我发送了一段消息"));
        }
    });

5.注册监听,接受消息并显示
public void onEventMainThread(FirstEvent event){

    String msg = "onEventMainThread收到了消息"+event.getmMsg();

    tv_text.setText(msg);
    Toast.makeText(MainActivity.this, "mag"+msg, Toast.LENGTH_SHORT).show();

}

二、EventBus的四种模式
在EventBus3.0里面,采用@Subscribe(threadMode =ThreadMode.MAIN) 这样的方式来进行订阅。
1.ThreadMode.MAIN 表示这个方法在主线程执行
首先去判断当前如果是UI线程,则直接调用;否则: mainThreadPoster.enqueue(subscription, event);把当前的方法加入到队列,然后直接通过handler去发送一个消息,在handler的handleMessage中,去执行我们的方法。说白了就是通过Handler去发送消息,然后执行的。
2.ThreadMode.BACKGROUND 表示这个方法在后台执行,不能并发处理。
如果当前非UI线程,则直接调用;如果是UI线程,则将任务加入到后台的一个队列,最终由Eventbus中的一个线程池去调用

executorService = Executors.newCachedThreadPool();。
3.ThreadMode.ASYNC 表示这个方法在后台执行,并且可以异步处理。
将任务加入到后台的一个队列,最终由Eventbus中的一个线程池去调用;线程池与BackgroundThread用的是同一个。

这么说BackgroundThread和Async有什么区别呢?

BackgroundThread中的任务,一个接着一个去调用,中间使用了一个布尔型变量handlerActive进行的控制。
Async则会动态控制并发。

4.ThreadMode.POSYING 表示该方法和消息发送方在同一个线程中执行

参考资料:
http://blog.csdn.net/lmj623565791/article/details/40920453

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值