EventBus使用

一、EventBus介绍

Android optimized event bus that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality.

正如作者所说,EventBus可以简化Activities, Fragments, Threads, Services之间信息传递的代码量,而且效率更高.

二、EventBus环境搭建

作者GitHub地址:EventBus

对Gradle或者maven的依赖参照作者GitHub下的Add EventBus to your project.

三、如何使用EventBus

这里使用EventBus去处理支付页面(后边描述为Pager1)与WXPayEntryActivity(后边描述为Pager2)之间的信息传递。Pager1调起微信支付客户端的支付页面,点击左上角的返回按钮,返回到Pager1,Pager1接受Pager2发送过来的状态回调.

1.创建你的事物消息类

public class PayMessageEvent {

private int CallBackStatus;

public PayMessageEvent(int CallBackStatus) {

this.CallBackStatus = CallBackStatus;

}

public int getWXPayCallBackStatus() {

return CallBackStatus;

}

}

2.注册subscriber

EventBus.getDefault().register(this);

3.发送事件

EventBus.getDefault().post(newPayMessageEvent(0));

4.接受消息

框架的ThreadMode总共有4种:

(1)POSTING----onEvent

Subscriber will be called in the same thread, which is posting the event. This is the default. Event delivery  implies the least overhead because it avoids thread switching completely. Thus this is the recommended mode for simple tasks that are known to complete is a very short time without requiring the main thread. Event handlers  using this mode must return quickly to avoid blocking the posting thread, which may be the main thread.

如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。

(2)MAIN----onEventMainThread

Subscriber will be called in Android's main thread (sometimes referred to as UI thread). If the posting thread is the main thread, event handler methods will be called directly. Event handlers using this mode must return quickly to avoid blocking the main thread.

如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。

(3)BACKGROUND----onEventBackground

Subscriber will be called in a background thread. If posting thread is not the main thread, event handler methods will be called directly in the posting thread. If the posting thread is the main thread, EventBus uses a single background thread, that will deliver all its events sequentially. Event handlers using this mode should try to return quickly to avoid blocking the background thread.

如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行

(4)ASYNC----onEventAsync

Event handler methods are called in a separate thread. This is always independent from the posting thread and the main thread. Posting events never wait for event handler methods using this mode. Event handler methods should use this mode if their execution might take some time, e.g. for network access. Avoid triggering a large number of long running asynchronous handler methods at the same time to limit the number of concurrent threads. EventBus uses a thread pool to efficiently reuse threads from completed asynchronous event handler notifications.

使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.

这里我们使用onEventMainThread

@Subscribe

public void onEventPostThread(PayMessageEvent payMessageEvent) {

//Do your business.

}

5.解绑EventBus

EventBus.getDefault().unregister(this);

四、总结

通过使用Event对一些信息的传递,确实使代码更加简洁易懂,之后会对EventBus的源码进行深入的了解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目录 1.概述 2.实战 1.基本框架搭建 2.新建一个类FirstEvent 3.在要接收消息的页面注册Even...
    慕涵盛华阅读 13,561评论 2 16
  • 前言:EventBus出来已经有一段时间了,github上面也有很多开源项目中使用了EventBus。所以抽空学习...
    Kerry202阅读 5,063评论 1 2
  • EventBus这个开源框架出来已经很久了,深的很多开发者青睐,由greenrobot组织贡献(该组织还贡献了gr...
    Scus阅读 6,691评论 0 0
  • 简介 EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化Android事件传递,这...
    lwd45阅读 2,865评论 0 0
  • 概述 EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化Android事件传递,这...
    々志尚阅读 3,321评论 0 0

友情链接更多精彩内容