尝试将某些界面从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 ?
感谢。
答案 0 :(得分:0)
问题是Binder对你的界面IJobExecutionContext
一无所知,它不知道如何处理它。 Binder知道如何编组和解组原始类型。在其他情况下,您需要解释如何执行实现Parcelable接口的这些操作。因此,据我所知,您无法使用AIDL文件中的接口。您需要将IJobExecutionContext
替换为实现此接口的类。此外,该类还必须实现Parcelable
接口。