EventBus 3.0 的使用
2016-07-20 17:40
393 查看
EventBus在github的地址:https://github.com/greenrobot/EventBus
gradle:
一、 发送普通的消息的话 可以这样
注意: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才开始注册,这时候怎么办???????? 不要着急,休息一下。
用这个就可以解决了, 先发送了一个实体,然后跳转到新的activity,activity onCreate() 的时候设置Eventbus的regist()。 然后描述一下方法就行了。
例如:
方法名可以随便写, 但是上边的注解不能只有@Subscribe 即使方法名是onEventMainThread() 在Eventbus3.0上 也是得不到信息的, 必须要指明 sticky = true
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
相关文章推荐
- apache ftp相关问题整理
- 安卓.开发规范(高级)
- Scala 学习笔记(二)— Everything is an object
- c++中的图链表数据结构
- jenkins报错:java.lang.illegalstateexception already existed will not overwrite with
- makefile中的shell编程注意点
- 分部方法 partial
- Mac 下 Mosquitto 安装和配置 (Mosquitto为开源的mqtt服务器)
- VS2013实现数据库的增删改查
- 如何使用rem字体单位
- embedded dylibs/frameworks are only supported on iOS 8.0 and later
- Scala 学习笔记(一)
- 3W1H分析法
- 初学IOS_UI基础,滑动面板_XIB框架版_有GIF图_有源文件
- 图片右上角有一个气泡效果的textview
- 【BZOJ】1191 【HNOI2006】超级英雄Hero
- 17.1.1 How to Set Up Replication
- scala class和object的区别
- 关于angularJS自动转义html标签
- JavaScript原型链与继承