如何返回Android IPC中的活动对象列表

时间:2013-11-21 01:34:41

标签: android ipc generic-list aidl

尝试将某些界面从Android服务应用程序远程连接到另一个客户端应用程序,并使用AIDL方法..
所以我在IJobController.aidl中有一个接口 IJobController
    import 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>)

根据我的理解,这些接口可以在List(或Map)中与原始类型,Parcelable等一起使用。 在我只返回一个AIDL接口的另一种方法中,一切都很好,但似乎在列表容器中它不是。

我是否需要返回一个原始列表或IJobExecutionContext的实现列表,该列表也是 Parcelable

感谢。

1 个答案:

答案 0 :(得分:0)

问题是Binder对你的界面IJobExecutionContext一无所知,它不知道如何处理它。 Binder知道如何编组和解组原始类型。在其他情况下,您需要解释如何执行实现Parcelable接口的这些操作。因此,据我所知,您无法使用AIDL文件中的接口。您需要将IJobExecutionContext替换为实现此接口的类。此外,该类还必须实现Parcelable接口。