Activity跳转经过EventBus传值问题

根据阿里发布的Android开发规范:下载地址:https://102.alibaba.com/downloadFile.do?file=1520478361732/Android_v9.pdfide

Activity 间的数据通讯,对于数据量比较大的,避免使用 Intent + Parcelable
的方式,能够考虑 EventBus 等替代方案,以避免形成 TransactionTooLargeException。post

A界面 跳转到 B界面,传对象。this

可是用普通的EventBus方法【 EventBus.getDefault.post(xx)  】是存在问题的:问题是因为主界面还未建立,用于接收的EventBus还未注册,即发布者发了消息,但订阅者还未产生(通常消息的处理逻辑是先注册订阅,后接收),这样没有收到消息固然没法响应操做。spa

EventBus的粘性事件能够解决这样的问题。code

基本使用方法:对象

1,A界面 粘性事件的发布:blog

EventBus.getDefault().postSticky(barcodeEventBean,"registerData");
//跳转到接收message的界面
Intent intent = new Intent(A.this, B.class);
startActivity(intent);

 

2,B界面 粘性接收器的注册:事件

//注册EventBus的粘性事件
EventBus.getDefault().registerSticky(this);

3,B界面 接收A界面传值的方法开发

@Subscriber(tag = "registerData")
    public void getRegisterBarcode(EventBean.BarcodeEventBean barcodeEventBean) {
        if(barcodeEventBean != null && barcodeEventBean.getBarcodeList() != null){
          Log.e(barcodeEventBean.toString)
        }

    }

4,B界面在销毁的时候,取消注册rem

@Override
    protected void onDestroy() {
        super.onDestroy();
       EventBus.getDefault().removeStickyEvent(EventBean.BarcodeEventBean.class,"registerData");
    }
over
相关文章
相关标签/搜索