根据阿里发布的Android开发规范:下载地址:https://102.alibaba.com/downloadFile.do?file=1520478361732/Android_v9.pdf
Activity 间的数据通信,对于数据量比较大的,避免使用 Intent + Parcelable
的方式,可以考虑 EventBus 等替代方案,以免造成 TransactionTooLargeException。
A界面 跳转到 B界面,传对象。
但是用普通的EventBus方法【 EventBus.getDefault.post(xx) 】是存在问题的:问题是由于主界面还未创建,用于接收的EventBus还未注册,即发布者发了消息,但订阅者还未产生(一般消息的处理逻辑是先注册订阅,后接收),这样没有收到消息当然无法响应操作。
EventBus的粘性事件可以解决这样的问题。
基本使用方法:
1,A界面 粘性事件的发布:
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界面在销毁的时候,取消注册
@Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().removeStickyEvent(EventBean.BarcodeEventBean.class,"registerData"); }
over