EventBus 3.0 的使用

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

 

 

 

 

 

 

 

 

    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值