AIDL使用过程中会遇到自定义类型的数据传输,自定义类型可能会包含枚举类型,使用错误,会出现各种错误:
E/JavaBinder: *** Uncaught remote exception! (Exceptions are not yet supported across processes.)java.lang.ArrayIndexOutOfBoundsException: length=8; index=3014765at com.Data.<init>(Data.java:96)at com.Data$1.createFromParcel(Data.java:116)at com.Data$1.createFromParcel(Data.java:113)at com.DataListener$Stub.onTransact(DataListener.java:65)at android.os.Binder.execTransactInternal(Binder.java:1154)at android.os.Binder.execTransact(Binder.java:1123)
整理了下使用枚举注意事项
-
定义枚举
public enum CameraStatus {WORKING(0),CAMERA_FAILURE(1),UNRECOGNIZED(2);public static CameraStatus forNumber(int value) {switch (value) {case 0:return WORKING;case 1:return CAMERA_FAILURE;default:return UNRECOGNIZED;}}}
-
自定义类型添加枚举变量
public class Data implements Parcelable {public Data () {}public int size;public boolean valid;public CameraStatus camera_status = CameraStatus.UNRECOGNIZED;}
-
修改writeToParcel和构造方法
public void writeToParcel(Parcel dest, int flags) {dest.writeInt(size);dest.writeByte((byte) (valid? 1 : 0));dest.writeInt(camera_status.ordinal());} protected Data(Parcel in) {size= in.readInt();valid = in.readByte() != 0;camera_status = CameraStatus.values()[in.readInt()];
read和write顺序要对应上,不然会出问题。