关于android pendingIntent 传递Parcelable对象时数据丢失问题

1,426 阅读1分钟

原因是在6.0版本以上pendingIntent在这个过程中可能丢失了Parcelable对象 解决办法:

public class Parcelables {

public static byte[] toByteArray(Parcelable parcelable) {
    Parcel parcel=Parcel.obtain();

    parcelable.writeToParcel(parcel, 0);

    byte[] result=parcel.marshall();

    parcel.recycle();

    return(result);
}

public static <T> T toParcelable(byte[] bytes,
                                 Parcelable.Creator<T> creator) {
    Parcel parcel=Parcel.obtain();

    parcel.unmarshall(bytes, 0, bytes.length);
    parcel.setDataPosition(0);

    T result=creator.createFromParcel(parcel);

    parcel.recycle();

    return(result);
}

}

通过将Parcelable对象先转化成byte数组传递,然后在broadcast中获取到这个byte数组,再将其转化成Parcelable对象 。