我想克隆一个 Parcel 对象(不可打包)。
我不能使用 clone() 方法,因为它受到保护。我也不能使用反射来调用它,因为 Parcel 类没有实现“可克隆”
我尝试执行问题的解决方案: 创建包裹对象的副本, 但它不适用于包裹类型本身 - 原因是没有为包裹类型本身定义“writeToParcel”。所以对于对象'Parcel a',a.writeToParcel(parcel, 0) 不会编译。
我想克隆一个 Parcel 对象(不可打包)。
我不能使用 clone() 方法,因为它受到保护。我也不能使用反射来调用它,因为 Parcel 类没有实现“可克隆”
我尝试执行问题的解决方案: 创建包裹对象的副本, 但它不适用于包裹类型本身 - 原因是没有为包裹类型本身定义“writeToParcel”。所以对于对象'Parcel a',a.writeToParcel(parcel, 0) 不会编译。
利用Parcel.appendFrom()
这比编组和解组更有效,并且不会丢失有关对象引用或FileDescriptor
包裹中的任何数据。
资料来源:无意中听到 Android 框架开发人员谈论这个,并决定更新 Stackoverflow 问题。
你可以通过编组/解组来做到这一点
byte[] rawData = original.marshall();
Parcel clone = Parcel.obtain();
clone.unmarshall(rawData, 0, rawData.length);
clone.setDataPosition(original.dataPosition());
但它不适用于所有包裹。我认为它在带有活动对象的 Parcels 上失败了,但我还没有测试过以确定。