EventBus

EventBus是事件消息总站,实现组件与组件之间的通信
普通事件
1、在需要接收事件或者数据的类中注册 
EventBus.getDefault().register(ThirdActivity.this); 
2、在需要接收事件或者数据的类中反注册 (在onDestroy)
EventBus.getDefault().unregister(ThirdActivity.this); 
3. 构造发送信息类 
public static class ClassEvent{ 
public String data; 
ClassEvent( String data){  (String为传递的参数类型,根据自己需求定义)
this.data=data; 
}; 
4. 发布消息  (参数中new 的是自定义的消息类)
EventBus.getDefault().post(new ClassEvent(“某个地方发送过来的数据”)); 
5. 在需要接收事件或者数据的类中定义方法接收消息 
@Subscribe(threadMode = MAIN) 
public void EventBus(ClassEvent event){ 
tv_result.setText(event.jsonData); 
粘性事件
EventBus 将最新的粘性事件保存在内存中,粘性事件可以被传递给订阅者
1.创建EventBus粘性事件消息类,设置属性:定义的是泛型String类型,(黄色涂抹区域)就只能传递String类型事件  (根据自己传递的消息类型定义泛型)
public class EventBusStickyMessage { public String Message ; public EventBusStickyMessage( String message) { Message = message; } }
2. 发送黏性事件到接收页面,关键方法postSticky
(new的类就是第一步定义的事件消息类)(此段代码是写在发送消息组件的页面的)
EventBus . getDefault ().postSticky( new EventBusStickyMessage( " xxx " ));

3.接收黏性事件,在注解里多加了一个属性Sticky,设置为true是启动黏性事件
(此段代码写在接收消息的组件的页面,线程模式有四种,MAIN为UI线程,也就是主线程,-------------接收实际就是注册的一个过程)

@Subscribe (threadMode = ThreadMode. MAIN ,sticky = true ) public void ReceviceMessage(A(参数A第一步定义的消息类) a(a为消息类的对象){
//设置控件的内容,通过消息对象的.Message调用 txtShow2 .setText(eventBusStickyMessage. Message ); }
// 一旦注册了 EventBus 就会接收到消息 if ( flag ){ //4. EventBus 注册广播 (), 参数是上下文 . 导入的 EventBus 请认准 org.greenrobot // 注意 : 有注册就必须有解注册 ( 一般在 OnDestroy 里执行解注册操作 ), 防止内存泄漏 , 注册一个界面只能注册一次 , 否则报错 EventBus. getDefault ().register( this ); // 更改标记 , 使其不会再进行注册 , 多次注册会报错 flag = false ; }

4. onDestroy 里解除 EventBus 注册 , // 注意 : 这里比普通的解除注册还多一步 , 就是移除黏性事件 ( 是移除所有的还是移除一个 , 看需求 ) @Override protected void onDestroy() { // 移除所有的粘性事件 EventBus. getDefault ().removeAllStickyEvents(); // 解除注册 EventBus. getDefault ().unregister( this ); super .onDestroy(); }}
备注:线程的模式
ThreadMode.POSTING:默认使用该模式,表示该方法会在当前发布事件的线程执行
ThreadMode.MAIN:表示会在UI线程中执行
ThreadMode.BACKGROUND:若当前线程非UI线程则在当前线程中执行,否则加入后台任务队列,使用线程池调用
 
线程池 是一种多 线程 处理形式,处理过程中将任务添加到队列,然后在创建 线程 后自动启动这些任务
ThreadMode.ASYNC:加入后台任务队列,使用线程池调用
普通事件与粘性事件的区别
最大的特点就是添加了粘性事件(sticky),同时使用EventBus粘性事件的步骤和顺序也和普通使用有所不同。

你可能感兴趣的:(安卓开发,移动)