前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android EventBus 3.0使用指南

android EventBus 3.0使用指南

作者头像
xiangzhihong
发布2018-02-05 14:38:23
7260
发布2018-02-05 14:38:23
举报
文章被收录于专栏:向治洪向治洪

Enventbus的作用和好处我就不多说了,这里介绍下怎么使用。

2.+版本的使用方法

代码语言:javascript
复制
public void onEvent(MessageEvent event) {
    log(event.message);
}
代码语言:javascript
复制
public void onEventMainThread(MessageEvent event) {
    textField.setText(event.message);
}
代码语言:javascript
复制
public void onEventBackgroundThread(MessageEvent event){
   saveToDisk(event.message);
}

3.0以后的写法

代码语言:javascript
复制
@Subscribe(threadMode = ThreadMode.MainThread) //在ui线程执行
public void onUserEvent(UserEvent event) {
}
代码语言:javascript
复制
@Subscribe(threadMode = ThreadMode.BackgroundThread) //在后台线程执行
public void onUserEvent(UserEvent event) {
}
代码语言:javascript
复制
@Subscribe(threadMode = ThreadMode.Async) //强制在后台执行
public void onUserEvent(UserEvent event) {
}
代码语言:javascript
复制
@Subscribe(threadMode = ThreadMode.PostThread) //默认方式, 在发送线程执行
public void onUserEvent(UserEvent event) {
}

相对之前,大量用到了注解,对于注解的介绍,请查看下面的文章https://cloud.tencent.com/developer/article/1036514

EnventBus的简单使用

代码语言:javascript
复制
@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发送事件, 那么可以不需要先注册, 也能接受到事件。

首先,你可能需要声明一个方法:

代码语言:javascript
复制
@Subscribe(threadMode = ThreadMode.MainThread, sticky = true)
public void onEvent(MsgEvent event){
}

注意这里的sticky必须设置为true。

然后就可以发送事件了。

代码语言:javascript
复制
EventBus.getDefault().postSticky(new MsgEvent("With Sticky"));

然后再需要接受的地方就可以接受发送的事件了

对于EventBus这里有几个参数需要重点说明下

代码语言:javascript
复制
/**
 * threadMode 表示方法在什么线程执行   (Android更新UI只能在主线程, 所以如果需要操作UI, 需要设置ThreadMode.MainThread)
 * sticky     表示是否是一个粘性事件   (如果你使用postSticky发送一个事件,那么需要设置为true才能接受到事件)
 * priority   优先级                 (如果有多个对象同时订阅了相同的事件, 那么优先级越高,会优先被调用.)
 * */
@Subscribe(threadMode = ThreadMode.MainThread, sticky = true, priority = 100)
public void onEvent(MsgEvent event){
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-10-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档