1.简介

目录

 1.简介

  2.下载地址

 3.基本使用案例

4.粘性事件使用:

 4.1消息类

4.2第二个界面实现:

4.3粘性事件解注册 

注意:重复注册会崩溃设置标志位


EventBus是一个Android端优化的publish/subscribe消息总线简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。

  2.下载地址

https://github.com/ZengjxRsingstar/EventBus

 

[ 安卓框架] EventBus

  •  3.基本使用案例

1)添加jar包到libs文件夹下

[ 安卓框架] EventBus

 注册:EventBus.getDefault().register(this);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    EventBus.getDefault().register(this);

}

 解注册防止内存泄漏: EventBus.getDefault().unregister(this);

@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}

 3.构造消息类

package com.EventBusDemo.message;
/**
 * Created by zengjx on 2019/3/7.
 */
public class MessageEvent {
    public String name;
    public String password;
    public MessageEvent(String name, String password) {
        this.name = name;
        this.password = password;
    }
}

第1个EvenBusDemoActivity 接收消息部分:必须有 @Subsribe   描述

@Subscribe(threadMode = ThreadMode.MAIN)
    public void messageEventBus(MessageEvent event){
        tv_result.setText("name:"+event.name+" passwrod:"+event.password);
    }

 

 //3.订阅方法
//    @Subscribe(threadMode = ThreadMode.MAIN,sticky = false,priority = 0)//sticky=false 表示无粘性 ,priority优先级越小越高
    public void showData(MediaItem mediaItem) {
        //发消息开始歌词同步
        showLyric();
        showViewData();
        checkPlaymode();
        setupVisualizerFxAndUi();

    }

[ 安卓框架] EventBus

4.发布消息:

@Override
public void onClick(View v) {
  switch (v.getId()){
      case R.id.btn_send:
          Intent intent=new Intent(EvenBusDemoActivity.this, EventSendActivity.class);
          intent.putExtra("CODEID",1);
          startActivityForResult(intent,1);//跳转到第二个 发送界面
       break;
     
  }
}
第二个EventSendActivity  Activity:
@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.btn_send:
          
            //构造发送消息类
          EventBus.getDefault().post(new MessageEvent("zengjx","123456"));
          //  finish();
            break;
    
    }
}

 实验点击第二节界面的 send 按钮,跳回第一个界面会显示 数据。

粘性事件使用:

[ 安卓框架] EventBus

不同点在于 注册是接收时候 注册。

 消息类

public class StickyEvent {
    public String msg;

    public StickyEvent(String msg) {
        this.msg = msg;
    }
}

第一个界面:实现  发送消息

@Override
public void onClick(View v) {
  switch (v.getId()){
   
      case  R.id.btn_stiky:
          Intent intent1=new Intent(EvenBusDemoActivity.this, EventSendActivity.class);
          intent1.putExtra("CODEID",1);
          startActivityForResult(intent1,1);//
          EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件","1234"));
          break;   


  }

第二个界面实现:

 注册:

@Override
public void onClick(View v) {
    switch (v.getId()){
      
        case  R.id.btn_stiky:
           if(!isRegister){//注意:重复注册会崩溃
                isRegister=true;
               EventBus.getDefault().register(EventSendActivity.this);
            }
           // EventBus.getDefault().register(EventSendActivity.this);
            break;
        /****
         * Process: com.zengjx.androidbaseproject, PID: 26610
         org.greenrobot.eventbus.EventBusException: Subscriber class com.EventBusDemo.EventSendActivity already        registered to event class com.EventBusDemo.message.StickyEvent
         at org.greenrobot.eventbus.EventBus.subscribe(EventBus.java:158)
         at org.greenrobot.eventbus.EventBus.register(EventBus.java:143)
         at com.EventBusDemo.EventSendActivity.onClick(EventSendActivity.java:64)
          */
    }

粘性事件解注册 

@Override
protected void onDestroy() {
    super.onDestroy();
 
   //  EventBus.getDefault().unregister(EventSendActivity.this);
    EventBus.getDefault().removeAllStickyEvents();
    EventBus.getDefault().unregister(EventSendActivity.class);
}

跳转到第二个界面后点击接收粘性数据按钮此时txtView显示"我是粘性事件1234"

  • 注意:重复注册会崩溃设置标志位

相关文章: