EventBus的普通事件与粘性事件使用

普通事件的操作顺序
1、在需要接收事件或者数据的类中注册
EventBus.getDefault().register(ThirdActivity.this);
2、在需要接收事件或者数据的类中反注册
EventBus.getDefault().unregister(ThirdActivity.this);
3、构造发送信息类
public static class ClassEvent{
public String data;
ClassEvent( String data){
this.data=data;
};
} //定义一个事件, 可以不包含成员变量,和成员方法
4、发布消息
EventBus.getDefault().post(new ClassEvent(“某个地方发送过来的数据”));
5、在需要接收事件或者数据的类中定义方法接收消息
@Subscribe(threadMode = MAIN)
public void EventBus(ClassEvent event){
tv_result.setText(event.jsonData);
}
其次粘性事件的操作顺序
1、构造发送信息类
2、发布消息
EventBus.getDefault().postSticky(new StickyEvent(“粘性数据”));
3、接收消息
@Subscribe(threadMode = MAIN,sticky = true)
public void StickyEvent(StickyEvent event){
tv_result.setText( event.jsonData);
}
4、注册
EventBus.getDefault().register(ThirdActivity.this);
5、反注册
@Override
protected void onDestroy() {
//粘性事件反注册 注意unregister中不能传this 要传ThirdActivity.this
EventBus.getDefault().unregister(ThirdActivity.this);
EventBus.getDefault().removeAllStickyEvents();
super.onDestroy();
}
接下来详细说下应该注意的地方
1.Android studio的build.gradle中加入
compile ‘org.greenrobot:eventbus:3.0.0’
2.在接收事件的activity的onCreate()和onDestroy()方法中,注册和反注册evenBus。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(MainActivity.this); //注意必须传入MainActivity.this,不可以是this
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(MainActivity.this);注意必须传入MainActivity.this,不可以是this
}
3.//在任意地方,调用发送事件,发送所需要的数据,对象,集合等都是可以的
EventBus.getDefault().post(new ClassEvent(“哈哈”));//第3步: 发送事件
}
//在任意地方,注册事件类
public static class ClassEvent{
public String data;
ClassEvent( String data){
this.data=data;
};
} //定义一个事件, 可以不包含成员变量,和成员方法
4.//在注册了的Activity中,声明处理事件的方法,接收事件
@Subscribe(threadMode = ThreadMode.MAIN) //注册一个在后台线程执行的方法,用于接收事件
public void onUserEvent(SecondActivity.ClassEvent event) {//参数必须是ClassEvent类型, 否则不会调用此方法
Toast.makeText(MainActivity.this,event.data,Toast.LENGTH_SHORT).show();
}
备注:
ThreadMode.POSTING:默认使用该模式,表示该方法会在当前发布事件的线程执行
ThreadMode.MAIN:表示会在UI线程中执行
ThreadMode.BACKGROUND:若当前线程非UI线程则在当前线程中执行,否则加入后台任务队列,使用线程池调用
ThreadMode.ASYNC:加入后台任务队列,使用线程池调用
下载地址:http://download.csdn.net/download/lzq520210/9710987

你可能感兴趣的:(EventBus)