2012-11-29 89 views
2

我想克隆一個Parcel對象(不可parcelable)。如何克隆一個Parcel對象

由於受保護,我無法使用clone()方法。我也可以不使用反射調用它,因爲包裹類未實現「可克隆」

我試圖執行問題的解決: Create a copy of parcel object 但它並不適用於包裹類型本身 - 而其中的原因沒有爲parcel類型本身定義'writeToParcel'。因此對於對象'Parcel a',a.writeToParcel(parcel,0)將不會編譯。

+2

包裹不可檢驗。 – njzk2

回答

-1

您可以通過編組做/解組

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

它並不適用於所有包裹的工作,雖然。我認爲它對具有活動對象的包裹不起作用,但我沒有測試確定。

+0

減少投票,因爲它是一個不完整的解決方案,而不是真正的高性能。包裹#appendFrom是要走的路。 – xaethos

3

使用Parcel.appendFrom()

這是不是打包和解包更高效,也不會失去與小區對象引用或FileDescriptor小號的任何數據。對於這個問題,聽到有人聽到Android框架開發者的意見,並決定更新Stackoverflow問題。