我正在研究在两个进程之间共享活动对象,但是有关它的文档通常乏善可陈,有时甚至不正确。
具体来说,我正在研究通过包裹共享 Binder 对象。文档指出。
活动对象
Parcel 的一个不同寻常的功能是能够读取和写入活动对象。对于这些对象,不会写入对象的实际内容,而是写入引用该对象的特殊标记。从 Parcel 中读回对象时,您不会获得该对象的新实例,而是获得一个句柄,该句柄对最初写入的完全相同的对象进行操作。有两种形式的活动对象可用。
Binder 对象是 Android 通用跨进程通信系统的核心设施。IBinder 接口描述了一个带有 Binder 对象的抽象协议。任何此类接口都可以写入 Parcel,并且在阅读时,您将收到实现该接口的原始对象或将回调通信回原始对象的特殊代理实现。使用的方法有 writeStrongBinder(IBinder)、writeStrongInterface(IInterface)、readStrongBinder()、writeBinderArray(IBinder[])、readBinderArray(IBinder[])、createBinderArray()、writeBinderList(List)、readBinderList(List)、createBinderArrayList() .
但是在收到包裹时,返回的对象只是一个BinderProxy,不能转换为原始类,也不能实现任何超出基本IBinder调用的调用。虽然这显然是文档中提到的代理对象,但我想知道引用同一语句中提到的原始对象的方法是什么。
我还想知道是否有来源可以更彻底地解释或记录该主题。