Android-第三方框架EventBus

简介

EventBus是一个消息总线,以观察者模式实现,用于简化程序的组件、线程通信,可以轻易切换线程、开辟线程。用于Activity,Fragment,Service,BroadCast等之间的通信。

EventBus 主要用来传递消息,可以代替Handle,callback,interface等。

使用

1 . 添加jar。

gradle中添加  compile 'org.greenrobot:eventbus:3.0.0'

2 . 应用

  • 在当前添加绑定和解除绑定。
@Override
 public void onCreate() {
     super.onCreate();
     //......
     EventBus.getDefault().register(this);//添加绑定
 }

@Override
public void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);//解除绑定
    }   


  • 发送消息
    不管发布者是在主线程还是子线程,发布的消息在所有定义好的实体类型订阅者中都可以接收到消息。也就是,可以实现一个订阅者订阅多个事件,和一个事件对应多个订阅者。(参考别人的)
//发送一次
EventBus.getDefault().post(obj)

//发送多次
EventBus.getDefault().postSticky(obj);
  • 接收消息

    EventBus3.0有以下四种接收ThreadMode

    POSTING(默认):事件在哪个线程发布出来的,事件处理函数就会在这个线程中运行。
    MAIN: 主线程中运行,主要用来up UI。
    BACKGROUND:如果事件是在主程中发布,那么创建新的子线程中运行,如果事件是子线程中发布的,则在当前线程处理。在此事件处理函数中禁止进行UI更新操作。
    ASYNC:无论事件在哪个线程发布,该事件处理函数都会在新建的子线程中执行,同样,此事件处理函数中禁止进行UI更新操作。

    这里直接以传递Message对像为例

/**
     * 默认的线程模式,在当前线程下运行。如果当前线程是子线程则在子线          程中,当前线程是主线程,则在主线程中执行。
     * @param event
     */
 @Subscribe(threadMode = ThreadMode.POSTING)
 //发送多次
 /*@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)*/
    public void onMessage(Message event) {
        //方法名自己定义,添加注解就好
        //......
    }

   /**
     * 在主线程中运行
     * @param event
     */
 @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessage(Message event) {
        //...... 更新ui
    }

/**
     * 在后台线程中执行,如果当前线程是子线程,则会在当前线程执行,如果当前线程是主线程,则会创建一个新的子线程来执行
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.BACKGROUND)
    public void  onEventBackgroundThread(Message event){
        //......
    }


/**
     * 创建一个异步线程来执行
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.ASYNC)
    public void onEventAsync(Message event){
         //......
    }

完整代码

实现:主界面点击,发送多次事件,实现打开Activity,并且在Activity中显示发送的Message内容。

主界面代码:

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);//添加绑定

        findViewById(R.id.tv_selfview).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //发送message为例,带有what和obj,这样以后可以通过what来区分类型
                EventBus.getDefault().postSticky(Message.obtain(null, 0x01, "Test"));
            }
        });
    }


    /**
     * 发送消息的接收时间,名称自定义,添加注解
     * 注解是通过反射的方式实现
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void onMoonEvent(Message event) {
        startActivity(new Intent(getApplicationContext(), PostTestActivity.class));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);//解除绑定
    }

}

secondActivity代码实现

public class PostTestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_post_test);
        EventBus.getDefault().register(this);//添加绑定

    }


    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void onMessage(Message event) {
        ((TextView) findViewById(R.id.tv_showInfo)).setText(event.obj.toString());
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);//解除绑定
    }
}

以上就是EventBus的简单应用,适合于发送替换广播,Handler,Service通信等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值