貌似最近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.
如果想深入了解一些的,可以参考这个哥们的blog。
http://blog.csdn.net/lmj623565791/article/details/40920453