EventBus学习

    xiaoxiao2021-04-16  50

    在学习前先贴上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继续学习!

    转载请注明原文地址: https://ju.6miu.com/read-673132.html

    最新回复(0)