【问题标题】:AIDL parcel usageAIDL 包裹使用情况
【发布时间】:2015-12-13 19:21:06
【问题描述】:

我已阅读有关 Parcels 和 AIDL 的 Android 开发者网站,但我仍有一个问题。为什么一个 Parcelable 对象可以从 AIDL 接口方法返回,但不能作为参数传递给 AIDL 方法?我知道 AIDL 接口方法需要原始数据类型(如 android 开发者网站所述),但我能够将 Uri 对象作为参数传入 - 那么为什么我不能传入 Parcelable 对象呢?

【问题讨论】:

  • 你最后三句话(不包括“Thanks”)都是指“this”,不清楚你认为“this”是什么。

标签: android parcelable aidl


【解决方案1】:

您可以使用 AIDL 传递可包裹的对象。文档说“如果你有一个类,你想通过 IPC 接口从一个进程发送到另一个进程,你可以这样做。但是,你必须确保你的类的代码可用于 IPC 的另一端频道和你的类必须支持 Parcelable 接口。”

http://developer.android.com/guide/components/aidl.html#PassingObjects

【讨论】:

  • 是的,我确实读过这个。但是,当我尝试使用 Parcelable 对象作为参数时,AIDL 文件会抛出错误。另一方面,我可以毫不费力地将它用作接口函数的返回类型。根据我在其他地方读到的内容,它不能用作 in 参数。
  • 目前我已经在不使用它们的情况下继续前进,但以后可能会回到这一点。因此我没有代码了,但是当我回到这里时肯定会发布我得到的错误。
  • @satur9nine 我们可以在 .aidl void sendMessageParcelable(String app, Parcelable parcel) 中声明如下方法
  • @umesh 我不相信使用 Parcelable 本身会起作用,因为 Android 期望参数类型不仅要实现 Parcelable,还要有一个 CREATOR。请参阅developer.android.com/reference/android/os/Parcelable.html。如果您发送 Parcelable 本身,它似乎也违背了使用 AIDL 的目的,因为它没有特定含义。如果您想要一个灵活的同步 IPC 解决方案,您可以考虑使用 ContentProvider#call。
猜你喜欢
  • 2014-05-03
  • 2020-11-16
  • 2011-06-28
  • 2014-07-30
  • 2014-02-12
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多