Eventbus的基本使用

Eventbus是一个开源库,主要用来进行事件通信,可以在Activities, Fragments, Threads, Services之间。

下载地址:EventBus

下面来看看用法

1、定义事件

public class WhateverEvent { 
    private String message

    public WhateverEvent(String message){
        this.message = message;
    }

    public String getMessage(){
        return message;
}

2、注册、反注册EventBus
(1)getDefault() 为EventBus內建的Factory method,用来得到EventBus对象。
(2)没有unregister(this) 会造成memory leak

public class MainActivity extends AppCompatActivity {

    ...

    @Override
    protected void onResume() {
        super.onResume();
        EventBus.getDefault().register(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        EventBus.getDefault().unregister(this);
    }

    ...

}

3、订阅事件

public class MainActivity extends AppCompatActivity {

    ...

    public void onEvent(WhateverEvent event) {
        /* 处理事件 */
        Log.i("TAG", event.getMessage());
    };

    ...

}

onEvent() 可替换成 onEventMainThread(), onEventBackgroundThread(), onEventAsync()来指定要在哪个Thread执行。

在EventBus中的观察者通常有四种订阅函数(就是某件事情发生被调用的方法)

  • onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。
  • onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。
  • onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
  • onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync。

4、传送事件

public class WhatEverObject {

    ...

    private void someMethod() {
        /* 发送事件 */
        EventBus.getDefault().post(new WhateverEvent("Hello world!!"));
    };

    ...

}

知道用法以后,我们现在来看看下面这个图:


欢迎关注我的公众号:DroidMind

精品内容,独家发布


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值