您的位置:首页 > 其它

EventBus 3.0 的使用

2016-07-20 17:40 393 查看
EventBus在github的地址:https://github.com/greenrobot/EventBus

 

     gradle:   

compile 'org.greenrobot:eventbus:3.0.0'

 

 

一、 发送普通的消息的话 可以这样

                  注意:EventBus.getDefault().post(new ClassEvent());  接受消息的activity、fragment等必须先注册了,然后再post消息,然后才能得到消息。

 

 EventBus 在新版中取消了原来的使用方式

 

publicvoid
onEvent(MessageEvent
event) { log(event.message); }

publicvoid
onEventMainThread(MessageEvent
event) { textField.setText(event.message); }

publicvoid
onEventBackgroundThread(MessageEvent
event){ saveToDisk(event.message); }
 变成了:

@Subscribe(threadMode = ThreadMode.MainThread)//在ui线程执行

publicvoid
onUserEvent(UserEvent
event) { }

 

@Subscribe(threadMode = ThreadMode.BackgroundThread)//在后台线程执行

publicvoid
onUserEvent(UserEvent
event) { }

 

@Subscribe(threadMode = ThreadMode.Async)//强制在后台执行

publicvoid
onUserEvent(UserEvent
event) { }

 

@Subscribe(threadMode = ThreadMode.PostThread)//默认方式, 在发送线程执行

publicvoid
onUserEvent(UserEvent
event) { }

由于官方 文档 还没有更新, 特此记录, 

官方文档: https://github.com/greenrobot/EventBus/blob/master/HOWTO.md#delivery-threads-and-threadmodes

 

EventBus的简单使用:

//在Activity中,注册和反注册

@Override

protectedvoid
onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

      EventBus.getDefault().register(this);//第1步:
注册

  }

@Override

protectedvoid
onDestroy() {

      super.onDestroy();

      EventBus.getDefault().unregister(this);//反注册

  }

//在注册了的Activity中,声明处理事件的方法

@Subscribe(threadMode = ThreadMode.BackgroundThread)//第2步:注册一个在后台线程执行的方法,用于接收事件

publicvoid
onUserEvent(ClassEvent event) {//参数必须是ClassEvent类型, 否则不会调用此方法

}

 

//在任意地方,调用发送事件

EventBus.getDefault().post(new ClassEvent());//第3步:
发送事件

//在任意地方,注册事件类

static class ClassEvent{}//定义一个事件,
可以不包含成员变量,和成员方法

 

二、上边这个是我从网上找的,懒得写了。

        我写这篇的重点是,如果post了消息之后,才跳转到新的activity,新的activity才开始注册,这时候怎么办????????  不要着急,休息一下。

EventBus.getDefault().postSticky()

        用这个就可以解决了, 先发送了一个实体,然后跳转到新的activity,activity onCreate() 的时候设置Eventbus的regist()。 然后描述一下方法就行了。

        例如:   

@Subscribe(threadMode = ThreadMode.MAIN , sticky = true)
public void onEventMainThread(String Tag){

}

                   方法名可以随便写, 但是上边的注解不能只有@Subscribe  即使方法名是onEventMainThread() 在Eventbus3.0上 也是得不到信息的, 必须要指明 sticky = true

 

 

 

 

 

 

 

 

    

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: