首页 > 代码库 > EventBus简单应用和简单分析(附demo)

EventBus简单应用和简单分析(附demo)

貌似最近EventBus挺火,自己找了找资料,然后看了看,写了个简单demo。供大家参考。

EventBus项目中没有用到,我也是自己看一些资料,所以东西相对简单,见谅。一些高级功能,也只能靠大家自行摸索了。

一:首先说一下我觉得EventBus几个重要的点吧。

1.这个类似广播需要你将EventBus register和unregister

一般在onCreate()中注册,在onDestory()中注册。为什么要注册?

当你register()之后,他会遍历你的.class文件,找到几个重要的onEvent开头的方法

(onEventMainThread()、onEventPostThread()、onEventBackgroundThrad()、onEventAsync())后面会介绍这几这onEvent开头的方法。

2.注册完之后,比如在子线程中执行一个耗时的操作,当完成之后,需要更新界面。这时不需要handler可以这样.

2.1调用EventBus.getDefault.post(参数);

这个参数,是你需要传递的数据,比如是一个list.

2.2在你的类中添加方法

public void onEventMainThread(参数){

//比如listView更新

//listview.setadapter(参数);

}

这里的参数,就是你之前EventBus.getDefault.post(参数)中的参数,如果类型不同,那么就会找不到onEventMainThread(参数),从而无法更新。

为什么呢?

之前说过,当你register()注册的时候,他会遍历你的类然后找出onEvent开头的方法,他会把这些方法放到一个map集合中,当你调用EventBus.getDefault.post(参数)它就会去map中找制定的onEvent开头的方法.

3.当你使用完,记得调用EventBus.getDefault..unregister(context);来注销


二:说一下这几个onEvent开头的方法。

这些方法并不是重写的,而是需要你写出来的方法.所以一定要仔细。

onEventMainThread():UI线程,不多说,更新界面什么的就在这里面。

onEventPostThread():谁调用的EventBus.getDefault().post(参数)这个时候的线程,那么onEventPostThread()就代表那个线程,同ui对比,就一目了然了。

onEventBackgroundThrad():这里面有线程池,可以排队。

onEventAsync():这个没有排队。


附上EventBus的机制(英文)

我写个大白话解释吧,我(publisher)想让eventBus工作,就调用Event.getDefault().post()

eventBus接收到你的信息,他会找对应的onEvent()就是(Subscriber).


EventBus...

  • simplifies the communication between components
    • decouples event senders and receivers
    • performs well with Activities, Fragments, and background threads
    • avoids complex and error-prone dependencies and life cycle issues
  • makes your code simpler
  • is fast
  • is tiny (<50k jar)
  • is proven in practice by apps with 100,000,000+ installs
  • has advanced features like delivery threads, subscriber priorities, etc.


demo源码下载


如果想深入了解一些的,可以参考这个哥们的blog。

http://blog.csdn.net/lmj623565791/article/details/40920453



EventBus简单应用和简单分析(附demo)