Enventbus的作用和好处我就不多说了,这里介绍下怎么使用。
2.+版本的使用方法
- public void onEvent(MessageEvent event) {
- log(event.message);
- }
- public void onEventMainThread(MessageEvent event) {
- textField.setText(event.message);
- }
- public void onEventBackgroundThread(MessageEvent event){
- saveToDisk(event.message);
- }
3.0以后的写法
- @Subscribe(threadMode = ThreadMode.MainThread) //在ui线程执行
- public void onUserEvent(UserEvent event) {
- }
- @Subscribe(threadMode = ThreadMode.BackgroundThread) //在后台线程执行
- public void onUserEvent(UserEvent event) {
- }
- @Subscribe(threadMode = ThreadMode.Async) //强制在后台执行
- public void onUserEvent(UserEvent event) {
- }
- @Subscribe(threadMode = ThreadMode.PostThread) //默认方式, 在发送线程执行
- public void onUserEvent(UserEvent event) {
- }
相对之前,大量用到了注解,对于注解的介绍,请查看下面的文章http://blog.csdn.net/xiangzhihong8/article/details/52850214
EnventBus的简单使用
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- EventBus.getDefault().register(this); //第1步: 注册
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- EventBus.getDefault().unregister(this);//反注册
- }
- @Subscribe(threadMode = ThreadMode.BackgroundThread) //第2步:注册一个在后台线程执行的方法,用于接收事件
- public void onUserEvent(ClassEvent event) {//参数必须是ClassEvent类型, 否则不会调用此方法
- }
- //在任意地方,调用发送事件
- EventBus.getDefault().post(new ClassEvent());//第3步: 发送事件,当然参数是Object,所以可以发送任何对象
- //在任意地方,注册事件类
- public static class ClassEvent{
- } //定义一个事件, 可以不包含成员变量,和成员方法
- //当然你也可以定义包含成员变量的事件, 用来传递参数
- public class MsgEvent {
- public String jsonData;
- public MsgEvent(String jsonData) {
- this.jsonData = jsonData;
- }
- }
Sticky事件的使用
如果你使用postSticky发送事件, 那么可以不需要先注册, 也能接受到事件。
首先,你可能需要声明一个方法:
- @Subscribe(threadMode = ThreadMode.MainThread, sticky = true)
- public void onEvent(MsgEvent event){
- }
注意这里的sticky必须设置为true。
然后就可以发送事件了。- EventBus.getDefault().postSticky(new MsgEvent("With Sticky"));
然后再需要接受的地方就可以接受发送的事件了
对于EventBus这里有几个参数需要重点说明下
- /**
- * threadMode 表示方法在什么线程执行 (Android更新UI只能在主线程, 所以如果需要操作UI, 需要设置ThreadMode.MainThread)
- * sticky 表示是否是一个粘性事件 (如果你使用postSticky发送一个事件,那么需要设置为true才能接受到事件)
- * priority 优先级 (如果有多个对象同时订阅了相同的事件, 那么优先级越高,会优先被调用.)
- * */
- @Subscribe(threadMode = ThreadMode.MainThread, sticky = true, priority = 100)
- public void onEvent(MsgEvent event){
- }