2015-09-12 139 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

相关问题