EventBus学习

在学习前先贴上GitHub地址

https://github.com/greenrobot/EventBus

然后GitHub官网教程

http://greenrobot.org/eventbus/

毕竟官方的才是最好的!这里只是分享下学习经验


什么是EventBus
EventBus是基于发布/订阅的消息总线。
它简化了Activities, Fragments, Threads, Services等之间的通信

消息总线,有三个主要的元素:
Event:事件
Subscriber:事件订阅者,接收特定的事件
Publisher:事件发布者,用于通知Subscriber有事件发生

这里写图片描述

EventBus使用的 3个步骤

定义事件:

public static class MessageEvent { /* Additional fields if needed */ }

准备订阅者:声明和注释您的订阅方法,可选择指定线程模式:

@Subscribe(threadMode = ThreadMode . MAIN) 公共 无效
onMessageEvent(MessageEvent的事件){ / *做一些事情* / };

注册并取消注册您的订阅者。例如在Android上,活动和片段通常应根据其生命周期进行注册:

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

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

注:在实际项目中我们把注册和反注册会放在onCaerta和onDestroy,部分场景下onStart会无法注册.这个问题去看下生命周期吧!

发布活动:

EventBus 。getDefault()。post(new MessageEvent());


threadMode线程模式

@Subscribe(threadMode = ThreadMode . MAIN)

然后在订阅的时候我们发现有一个threadMode,可选择指定线程模式.
我们来学习下有什么样的线程模式:

ThreadMode: POSTING
这个线程模式是默认的,代表这个方法会在当前发布事件的线程执行

// Called in the same thread (default)
// ThreadMode is optional here
@Subscribe(threadMode = ThreadMode.POSTING)
public void onMessage(MessageEvent event) {
    log(event.message);
}

ThreadMode: MAIN
代表这个方法会在UI线程执行

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

ThreadMode: BACKGROUND
这个方法,如果在非UI线程发布的事件,则直接执行。如果在UI线程发布的事件,则加入后台任务队列,使用线程池一个接一个调用。

// Called in the background thread
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessage(MessageEvent event){
    saveToDisk(event.message);
}

ThreadMode: ASYNC
代表它在单独的线程中调用,使用线程池来有效地重用线程完成的异步事件处理程序的通知。

// Called in a separate thread
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onMessage(MessageEvent event){
    backend.send(event.message);
}

eventbus的优点和缺点
优点
- 简化组件之间的通信
- 分离事件发送者和接收者
- 对Activity,Fragment和后台线程表现良好
- 避免复杂和容易出错的依赖关系和生命周期问题
- 使您的代码更简单
- 可定制行强,耦合度低

缺点
- 代码逻辑的分散
- 代码进行混淆会出现错误(新版可以通过注解解决)

安卓中组件数据传递方式

在安卓中经常使用的数据传递方式有:广播、Handler、Intent、观察者模式,现在有了eventbus在我们再也不用苦恼在Fragment中如何传递数据了!

eventbus、RxJava、Handler区别

在很多时候大家都会把三个的概念混淆,下面我来整理下三个的区别:
1.EventBus :一个基于发布 / 订阅的消息总线。
2.Handler:Android异步消息处理线程
3.RxJava:一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库
通过上面的介绍大家可以明确的知道EventBus是一个消息总线,简单点说,就是两人约定好怎么通信,一人发布消息,另外一个约定好的人就能接收到你发出的消息。
Handler和RxJava的关键在一个“异步”,虽然我们经常使用Handler和RxJava来传递消息,但是这不是他的全部。它还能处理耗时操作,更新UI…它们侧重点应该是在异步。

虽然在项目中使用了EventBus,可能还有认识不足的!下面我会写几个demo继续学习!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值