使用EventBus, 主要目的在于实现App组件间通信的解耦.
git地址: https://github.com/greenrobot/EventBus
基本使用流程:
1. 编写事件类
public class AnyTypeEvent { private String someMsg; public AnyTypeEvent(String message) { this.someMsg = message; } public String getSomeMsg() { return someMsg; } public void setSomeMsg(String someMsg) { this.someMsg = someMsg; } }
2. 注册事件订阅者
public class EventTestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_event_test); EventBus.getDefault().register(this); // 注册当前Activity为订阅者 // EventBus.getDefault()是一个单例实现的作用域范围为进程的event bus } @Override protected void onDestroy() { EventBus.getDefault().unregister(this); // 注销订阅者 super.onDestroy(); } }
3. 在订阅者内部实现订阅函数
订阅函数的名称固定为4种, 不可变. 这是因为EventBus是同通过反射函数名在订阅类中查找订阅函数.
注意: 不要使用register(Object subscriber, String methodName, ...)注册自定义名称的订阅函数, 在2.2版本中已经被Deprecated了.
订阅函数分为 onEvent, onEventMainThread, onEventBackground, onEventAsync.
订阅函数必须是public, 且形参个数必须只能是1个.(源代码中写死了...)
4种订阅函数之间存在差别.
... // Activity中关于AnyTypeEvent的订阅函数实现 public void onEvent(AnyTypeEvent event){ Toast.makeText(this, event.getSomeMsg(), Toast.LENGTH_SHORT).show(); } ...
4. 发布事件
btnOnEvent = (Button) findViewById(R.id.btn_act_main_on_event); btnOnEvent.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // 发布AnyTypeEvent类型的事件 EventBus.getDefault().post(new AnyTypeEvent("Button-onEvent is clicked.")); } });
5 四种订阅函数之间的区别.
它们之间的区别在于与post()函数相比较, 是在哪个线程运行订阅函数.
1) onEvent:
在哪个线程调用post(), 就在相同的线程执行onEvent().
2) onEventMainThread:
无论post()运行于哪个线程, 都在UI线程执行onEventMainThread().
3) onEventBackground:
如果post()运行在子线程, 则onEventBackground()也运行于子线程.
如果post()运行在UI线程, 则启动子线程运行onEventBackground()
4) onEventAsync:
无论post()运行于哪个线程, 都启动子线程执行onEventAsync()
针对性的选择使用订阅函数,可以避免在线程切换时引发的消耗.
在使用onEvent, onEventMainThread, onEventBackground时, 务必保证在函数内不要去执行耗时操作, 避免其阻塞了UI线程.
相关推荐
注意事项遇到问题请看:http://blog.csdn.net/qq_21376985/article/details/52438143
博客《EventBus使用详解(二)——EventBus使用进阶》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/40787203
博客《 EventBus使用详解(一)——初步使用EventBus》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/40660137
eventbus使用demo
EventBus使用
android EventBus使用简单示例
Android EventBus使用,粘性事件postSticky使用 https://blog.csdn.net/qq_31939617/article/details/80860615
博客《EventBus使用详解(一)——EventBus使用进阶》对应源码,博客地址:http://blog.csdn.net/wangyi891223/article/details/49885999
安卓 EventBus 使用示例,开发工具为eclipse+ADT,EventBus可简化安卓各个组件,线程之间的通信 相关博客 http://blog.csdn.net/qq_34763699/article/details/79467327
SpringBoot+EventBus使用教程示例代码,详细教程见博客地址:http://791202.com/2019/11/11/guava/74/
基于 greenrobot 的 eventBus 使用 RxJava 实现的事件总线
EventBus使用教程Demo,对应博文讲解EventBus源码。 http://blog.csdn.net/ljphhj
配合博客教程:Android框架之路——EventBus的使用
android eventbus 简单使用的详细介绍。
该demo详细注释讲解了关于eventbus的用法,解决了传统使用接口的繁琐方式。
主要介绍了eventbus的使用方法,替代Handle,来实现数据的接收与发送。
1.下载EventBus 2.如何使用EventBus 3.主界面搭建 4.EventBus框架原理流程图
利用EventBus来实时更新界面信息数据
EventBus 使用详解,EventBus是一款针对Android优化的发布/订阅事件总线 CSDN 地址:https://blog.csdn.net/yoyo_0316/article/details/52319554
这个是一个简单使用EventBus的Demo,里面实现了在线程里通过EventBus发送消息给主线程,实现加载框的变化功能