注册消息在要接受广播的位置注册
- eventBus.register(this);
取消注册
- eventBus.unregister(this);
发送广播
- eventBus.post(要发送的对象);
接受广播只要在相应的绑定类里面写上面四个方法就可以了,不需要接触重写,eventBus将通过反射自动调用存在的方法。
- public void onEvent( 发送过来的对象 ) {}
- public void onEventMainThread( 发送过来的对象 ) {}
- public void onEventBackground( 发送过来的对象 ) {}
- public void onEventAsync( 发送过来的对象 ) {}
如果存在多个接受方法他会根据你发送的对象来确定那个方法执行,如果多个方法参数相同两个方法都会用行到。
onEvent:那个线程发那个线程收
onEventMainThread :不管那个线程发都是ui线程收
onEventBackground:不管那个线程发都在子线程收
onEventAsync:不管怎么发都创建新的线程接受
onEventMainThread :不管那个线程发都是ui线程收
onEventBackground:不管那个线程发都在子线程收
onEventAsync:不管怎么发都创建新的线程接受
大神地址 http://blog.csdn.net/harvic880925/article/details/40787203
上面是3.0之前的使用方式,下面讲一下3.0之后的
compile 'org.greenrobot:eventbus:3.0.0'
在要接受的类注册, 参数:是当前类
EventBus.getDefault().register(Order_item_adapter.this);
运行时会有一个判断,判断当前类是否有接受的方法,无,则抛出异常,就是3.0之后注册的类是必须存在接受回调的方法的(删除什么的一定要注意删除干净)。
运行时会有一个判断,判断当前类是否有接受的方法,无,则抛出异常,就是3.0之后注册的类是必须存在接受回调的方法的(删除什么的一定要注意删除干净)。
接受方法
3.0之后接受方法不在是固定方法名字,而是加上注解,方法名可以变换
//方法参数根据情况可自己定义对象
@Subscribe(threadMode = ThreadMode.MAIN)
//注意改变之处。
public void onEventMainThread(String num){
//处理接受来的信息
}
//处理接受来的信息
}
ThreadMode有四个参数
posting 默认的参数,与发送对象在同一线程,子线程post,接受就是在子线程,同理主线程post接受就是主线程。特点不进行线程切换,消耗低,但要注意发送的线程,因为可以试主线程或者是子线程。
MAIN 都是在主线程中 接受 处理,ui修改时使用,不要使用耗时操作避免ui线程堵塞。
BACKGROUND 如果post 是子线程会在当前子线程运行接受,如果是ui线程则会重现建立一天子线程,防止阻塞(不需要修改ui只需要处理逻辑是使用)ASYNC 不管三七二十一都要重新创建一条子线程来运行。
发送消息
EventBus.getDefault().post(“1”);//发送方法,相对简单,但要注意的是发送方法的参数一定要和接受方法是同一个类型,否则是不会运行的,而且和2.0一样,3.0也可以根据参数来区分接受方法的。
取消注册
很容易产生莫名奇妙的事情,所以一定在接受类不在使用或者消灭是调用
EventBus.getDefault().unregister(this);