如何在 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 中返回活动对象列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在firebase android中获取对象ID?

Android:如何获取已安装活动的列表,就像它们出现在启动器中一样,没有重复

如何在android中选择多个活动?

Android:如何与本地服务通信和交换对象?

Android:如何使活动返回结果给调用它的活动?

android 从 AIDL 绑定服务返回“活动”对象