【发布时间】:2014-04-16 10:31:53
【问题描述】:
这是我唯一没有得到关于 AIDL 并且在 Google 或 Stackoverflow 上找不到任何内容的信息:
我有一个活动和一个服务,每个都在不同的进程中,它们使用 AIDL 通过 IPC 紧密通信。 AIDL 通信接口中的一种方法需要从服务中获取 my-custom-parcelable-class 对象列表并将它们返回给活动。
我对 AIDL 界面中的导入语句以及活动和服务的两端感到困惑。在 AIDL 界面中,我导入了我的 .aidl parcelable 声明。而如果在活动和服务中我导入了我的真实(.java)parcelable 类,并且这些声明冲突,因为 AIDL 接口实现希望我返回 .aidl parcelable 但我返回真正的 parcelable。
我会尽量用代码让它更清楚:
在我的服务中,我正在发送 MyParcelable 列表:
import package-with-java-files.MyParcelable; // IMPORTING REAL MyParcelable
...
protected final InterprocessCommunicator.Stub binder = new InterprocessCommunicator.Stub() {
@Override
public List<MyParcelable> getMyParcelables() throws RemoteException { // CONFLICT
return MyService.this.getMyParcelables();
}
}
在我的 AIDL 接口中,我声明了返回列表的方法:
package package-with-aidl-files;
import package-with-aidl-files.MyParcelable; // IMPORTING AIDL MyParcelable
interface InterprocessCommunicator {
List<MyParcelable> getMyParcelables();
}
在我的 AIDL parcelable 声明中(这就是我所说的 AIDL MyParcelable):
package package-with-aidl-files;
parcelable MyParcelable;
在我的 java parcelable 声明中(这就是我所说的真正的 MyParcelable):
package package-with-java-files;
public class MyParcelable implements Parcelable {
...
}
最后在我的活动中,我收到了 MyParcelable 列表:
import package-with-java-files.MyParcelable; // IMPORTING REAL MyParcelable
...
void someMethod() {
List<MyParcelable> responses = interprocessCommunicator.getMyParcelables(); // CONFLICT
....
}
我希望现在更清楚冲突在哪里: 在服务中,我返回 package-with-java-files.MyParcelable 列表,但 AIDL 接口需要 package-with-aidl-files.MyParcelable 和 Activity 中的一样
如何解决这些冲突? AIDL接口中无法导入真正的MyParcelable,Activity/Service中也无法导入AIDL MyParcelable...
AIDL 专家,我需要您的帮助! 提前致谢!
请不要给我链接官方 API 指南,因为那里没有任何内容 http://developer.android.com/guide/components/aidl.html#PassingObjects
【问题讨论】:
标签: java android ipc parcelable aidl