2

我想克隆一个 Parcel 对象(不可打包)。

我不能使用 clone() 方法,因为它受到保护。我也不能使用反射来调用它,因为 Parcel 类没有实现“可克隆”

我尝试执行问题的解决方案: 创建包裹对象的副本, 但它不适用于包裹类型本身 - 原因是没有为包裹类型本身定义“writeToParcel”。所以对于对象'Parcel a',a.writeToParcel(parcel, 0) 不会编译。

4

2 回答 2

3

利用Parcel.appendFrom()

这比编组和解组更有效,并且不会丢失有关对象引用或FileDescriptor包裹中的任何数据。

资料来源:无意中听到 Android 框架开发人员谈论这个,并决定更新 Stackoverflow 问题。

于 2015-01-06T01:43:23.613 回答
-1

你可以通过编组/解组来做到这一点

byte[] rawData = original.marshall();
Parcel clone = Parcel.obtain();
clone.unmarshall(rawData, 0, rawData.length);
clone.setDataPosition(original.dataPosition());

但它不适用于所有包裹。我认为它在带有活动对象的 Parcels 上失败了,但我还没有测试过以确定。

于 2014-06-30T13:03:22.963 回答