【发布时间】:2014-07-21 15:10:25
【问题描述】:
我对服务创建期间的编组有一个简单的疑问。当Parcelable接口中声明了writeToParcel()方法并在生成的stub中调用时(如果aidl方法参数声明为in),为什么Parcelable接口中没有readFromParcel()声明(对于@987654327 @ 参数)?
我可以创建自己的readFromParcel(),但根据我的理解,如果生成的存根想要调用它,Parcelable 接口中应该有一个覆盖的readFromParcel() 声明。但是Parcelable interface 的文档没有显示任何readFromParcel() 方法的迹象。为什么会这样?它是否包含在以前的 API 版本中,后来又被删除了?请解释!
如果 createFromParcel() 与 readFromParcel() 都尝试读取可打包对象并使用其中的数据填充成员字段,那么两者有何不同?
【问题讨论】:
-
readFromParcel需要一个预先创建的对象,而createFromParcel直接从包裹中返回一个新实例化的对象。这是因为当Parcelable类型的实例用作out或inout参数时,从概念上讲,Binder 子系统会先创建一个空对象,然后在返回响应时将其填充为readFromParcel。跨度>
标签: android android-service parcelable aidl