据我所知,AIDL编译器不喜欢Result< Animal> getResult();.但是,结果为getResult();.确实有效.这就是我所做的:
>创建具有签名公共类Result< Textended Parcelable>的类.实现Parcelable.
>创建了一个新类以放入第一个类,即动物.签名是公共类Animal实施Parcelable.
>必须在Result和Animal中实现接口Parcelable和CREATOR所需的方法,并且还根据需要为每个类创建一个AIDL,并将这两个类都导入到主AIDL中.这些东西是AIDL的常规工作,在AIDL site中有描述.
>在结果内部,我们不仅存储类型T的对象,还存储类的对象.编写包裹时,我们需要首先编写类类型,然后才编写通用对象.阅读时,我们以相同的顺序进行.我们需要编写类类型,因为在读取时,我们必须在int.readValue(classType.getClassLoader())中做t =(T);并且没有类类型,我们do not know提取哪个类加载器.可能还有其他方法可以做到这一点,但这就是我在此示例中所做的.
>在客户端节点上接收时,我可以成功执行Result< Animal> r = MainActivity.this.service.getResult();然后在Result和Animal上调用方法.
可以在下面找到一些可以使事情变得更清晰的代码.
public class Result implements Parcelable {
private String msg;
private Class classType;
private T value;
public Result(String msg, T value, Class classType) {
this.