如何在 Android IPC 中返回活动对象列表
Posted
技术标签:
【中文标题】如何在 Android IPC 中返回活动对象列表【英文标题】:how to return a List of active objects in Android IPC 【发布时间】:2013-11-21 01:34:40 【问题描述】:尝试将某些接口从 android 服务应用远程连接到另一个客户端应用,并使用 AIDL 方法.. 所以我在 IJobController.aidl 中有一个接口 IJobController: 导入 com.example.jobs.api.IJobExecutionContext;
interface IJobController
List<IJobExecutionContext> getCurrentlyExecutingJobs();
...
其中 IJobExecutionContext 在其自己的 AIDL 中定义:
interface IJobExecutionContext
Bundle getJobResult();
...
long getJobStartTime();
long getJobEndTime();
long getJobRunTime();
当这些定义在 gen 文件夹中编译时,我在生成的 IJobController.java 文件中收到类似这样的错误:
Type mismatch: cannot convert from ArrayList<IBinder> to List<IJobExecutionContext>
The method writeBinderList(List<IBinder>) in the type Parcel is not applicable for the arguments (List<IJobExecutionContext>)
据我了解,此类接口可以与原始类型、Parcelable 等一起用于列表(或地图)中。 在我只返回一个 AIDL 接口的另一种方法中,一切正常,但似乎在列表容器中它不是。
我需要只返回一个原始列表,还是一个 IJobExecutionContext 实现的列表,它也是 Parcelable?
谢谢。
【问题讨论】:
【参考方案1】:问题是Binder对你的接口IJobExecutionContext
一无所知,它不知道如何处理它。 Binder 知道如何仅对原始类型进行编组和解组。在其他情况下,您需要解释如何实现 Parcelable 接口来执行这些操作。因此,据我所知,您无法使用 AIDL 文件中的接口。您需要将IJobExecutionContext
替换为实现此接口的类。另外,这个类还必须实现Parcelable
接口。
【讨论】:
以上是关于如何在 Android IPC 中返回活动对象列表的主要内容,如果未能解决你的问题,请参考以下文章