EventBus 3.0 的使用

来源:互联网 发布:命令行添加密码 mysql 编辑:程序博客网 时间:2024/05/17 08:46

EventBus在github的地址:https://github.com/greenrobot/EventBus

 

     gradle:   

compile 'org.greenrobot:eventbus:3.0.0'

 

 

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

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

 

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

 

publicvoidonEvent(MessageEvent event) { log(event.message); }

publicvoidonEventMainThread(MessageEvent event) { textField.setText(event.message); }

publicvoidonEventBackgroundThread(MessageEvent event){ saveToDisk(event.message); }

 变成了:

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

publicvoidonUserEvent(UserEvent event) { }

 

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

publicvoidonUserEvent(UserEvent event) { }

 

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

publicvoidonUserEvent(UserEvent event) { }

 

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

publicvoidonUserEvent(UserEvent event) { }

由于官方 文档 还没有更新, 特此记录, 
官方文档: https://github.com/greenrobot/EventBus/blob/master/HOWTO.md#delivery-threads-and-threadmodes

 

EventBus的简单使用:

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

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

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

  }

@Override

protectedvoidonDestroy() {

      super.onDestroy();

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

  }

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

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

publicvoidonUserEvent(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

 

 

 

 

 

 

 

 

    

 

0 0