我对服务创建期间的编组有一个简单的疑问。如果在生成的存根中调用了writeToParcel()
接口中声明的Parcelable
方法(如果aidl方法参数声明为in
),为什么在readFromParcel()
接口中没有Parcelable
声明(对于out
参数)?
我可以创建自己的readFromParcel()
,但根据我的理解,如果生成的存根想要调用它,那么在Parcelable接口中应该有一个重写的readFromParcel()
声明。但是Parcelable interface的文档没有显示任何readFromParcel()
方法的迹象。为什么会这样?它是否包含在以前的api版本中,后来又被删除了?请解释一下!
如果createFromParcel()和readFromParcel()都试图读取Parcelable对象并用其中的数据填充成员字段,那么两者的区别有多大?
最佳答案
这是因为您在aidl中将该类型的参数声明为“inout”。
从方法返回时,生成的aidl代理将调用readFromParcel()
来更新参数值(由“inout”限定符定义)。