2015-09-12 47 views
1

我期待到共享兩個過程之間的活動對象,然而,文檔中有關它往往是無光澤和有時even incorrect.在進程之間共享活動對象的正確方法是什麼?

具體來說,我正在研究通過共享包裹一個活頁夾對象。該文件說明。

活動對象

包裹的一個不尋常的特點是讀寫活動對象的能力。對於這些對象,不寫入對象的實際內容,而是寫入引用該對象的特殊標記。從Parcel中讀回對象時,您不會獲得對象的新實例,而是一個對原來寫入的完全相同對象進行操作的句柄。有兩種形式的活動對象可用。

Binder對象是Android通用跨進程通信系統的核心工具。 IBinder接口描述了一個帶有Binder對象的抽象協議。任何這樣的接口都可以寫入到一個Parcel中,讀取後您將收到實現該接口的原始對象或者將調用回傳給原始對象的特殊代理實現。使用的方法是writeStrongBinder(IBinder),writeStrongInterface(IInterface),readStrongBinder(),writeBinderArray(IBinder []),readBinderArray(IBinder []),createBinderArray(),writeBinderList(List),readBinderList(List),createBinderArrayList() 。

但是,當收到包裹時,返回的對象僅僅是一個BinderProxy,它不能轉換爲原始類或實現超出基本IBinder調用的任何調用。雖然這顯然是文檔中提到的代理對象,但我想知道該方法用於引用在同一語句中提到的原始對象。

我還想知道是否有一個來源,更詳細地解釋或記錄了這個話題。

回答

-2

假定它正確地實現了Parcelable接口,您應該能夠將對象轉換爲其原始類。鑄造它就像這樣:

// in ProcessDataActivity retrieve User 
Intent intent = getIntent(); 
ParcelableObjectExample usr = (ParcelableObjectExample) 
    intent.getParcelableExtra("parcelableExample"); 

對於這個成功,你需要正確地貫徹ParcelableObjectExample的Parcelable接口,對於這一點,你必須:

  1. 實現其describeContents方法
  2. 實現它的抽象方法writeToParcel,它獲取對象的當前狀態並將其寫入Parcel
  3. 將一個名爲CREATOR的靜態字段添加到我們的類中,該類是一個實現Parcelable.Creator接口的對象
  4. 添加一個將Parcel作爲參數的構造函數。 CREATOR調用該構造函數來重建我們的對象。
+0

不幸的是,以這種方式使用parcelable編組該類,然後在取回時取消編組,意味着該對象僅僅是在新進程中重新創建,而不是作爲主動對象。 – Beryllium

相關問題