Eventbus 3官方文档翻译(一)

Eventbus 3官方文档翻译(一)
eventbus3的使用(3 steps)
  • Define events(定义事件) 事件定义只是使用POJO(普通旧式的java对象),没有其他的要求;
public class MessageEvent {

    public final String message;

    public MessageEvent(String message) {
        this.message = message;
    }
}
  • Prepare subscribers(准备订阅者) 写事件处理方法,当post同类型的事件,事件处理方法就会被回调,不用像使用eventbus2那样,书写方法时使用命名约定,在eventbus3中方法命名可以随意(EventBus 3 the method name can be chosen freely ),只要在方法上面加上@Subscribe 注解
// This method will be called when a MessageEvent is posted (in the UI thread for Toast)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
    Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}

// This method will be called when a SomeOtherEvent is posted
@Subscribe
public void handleSomethingElse(SomeOtherEvent event) {
    doSomethingWith(event);
}

注册订阅者(register Subscribers),订阅者只有注册完自己,它们才可以接收post事件,在android中,activity和fragment注册订阅者需要根据自己的生命周期,在大多数情况下,在onStart/onStop回调方法中注册就可以了

   @Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}



  • Post events(post事件) 可以在代码的任何地方post事件,只有事件类型匹配的订阅者才会接收的事件;
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
Delivery Threads (线程间分发)

EventBus可以自己处理线程的关系,post事件的线程与事件处理的线程可以是不同的线程;

  • ThreadMode: POSTING
    订阅者将会在与post event同一个线程中回调,当事件post完毕后,就会回调事件处理方法(订阅者),这是默认的thread mode,没有线程间的分发,所以消耗资源较小,对于简单的、较快完成、不要求主线程的tasks,这是推荐的thread mode,事件处理方法需要快速的完成,返回结果,避免阻塞posting thread,posting thread 也有可能是主线程;
// Called in the same thread (default)
// ThreadMode is optional here
@Subscribe(threadMode = ThreadMode.POSTING)
public void onMessage(MessageEvent event) {
    log(event.message);
}
  • ThreadMode: MAIN

订阅者将会在android的主线程中(UI线程)回调,如果post 事件的线程是在主线程中,事件处理方法会被直接的回调,事件处理方法需要快速的完成,返回结果,避免阻塞main thread;

// Called in Android UI's main thread
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessage(MessageEvent event) {
textField.setText(event.message);
}
  • ThreadMode: BACKGROUND

订阅者将会在background thread 线程中回调,如果发送事件的线程(posting thread)不是在main thread中,事件处理方法将会在posting thread中直接被回调,如果posting thread线程是在主线程中,eventbus使用一个background thread 来处理事件,事件处理方法需要快速的完成,返回结果,避免阻塞background thread;

// Called in the background thread
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessage(MessageEvent event){
    saveToDisk(event.message);
}
  • ThreadMode: ASYNC
    每个事件处理方法回调在单独的线程中,事件处理的线程总是独立于posting thread和main thread,posting事件不会等待事件处理方法完成,如果事件处理方法执行耗时、网络访问时,需要使用这个模式,为了避免同时存在大量的异步处理方法线程,eventbus限制了并发处理线程的数量,eventbus使用线程池来有效地重用线程;
// Called in a separate thread
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onMessage(MessageEvent event){
    backend.send(event.message);
}

EventBus3官方文档翻译(二)

EventBus3官方文档翻译(三)

如有不妥的地方,欢迎留言指出。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值