Java 使用AIDL在两个进程之间传输包裹
以下是我唯一没有了解到的关于AIDL的信息,在Google或Stackoverflow上找不到任何信息: 我有一个活动和一个服务,每一个都在不同的过程中,它们通过IPC使用AIDL进行紧密通信。 AIDL通信接口中的一个方法需要从服务中获取自定义包裹类对象的列表,并将它们返回到活动 我对AIDL接口中的导入语句以及活动和服务中两端的导入语句感到困惑。在AIDL接口中,我导入我的.AIDL包裹声明。然而,如果在活动和服务中,我导入了我的real(.java)parcelable类,并且这些声明冲突,因为AIDL接口实现希望我返回.AIDL parcelable,但我返回real parcelable 我将尝试用代码更清楚地说明: 在我的服务中,我将发送我的包裹列表:Java 使用AIDL在两个进程之间传输包裹,java,android,ipc,parcelable,aidl,Java,Android,Ipc,Parcelable,Aidl,以下是我唯一没有了解到的关于AIDL的信息,在Google或Stackoverflow上找不到任何信息: 我有一个活动和一个服务,每一个都在不同的过程中,它们通过IPC使用AIDL进行紧密通信。 AIDL通信接口中的一个方法需要从服务中获取自定义包裹类对象的列表,并将它们返回到活动 我对AIDL接口中的导入语句以及活动和服务中两端的导入语句感到困惑。在AIDL接口中,我导入我的.AIDL包裹声明。然而,如果在活动和服务中,我导入了我的real(.java)parcelable类,并且这些声明冲突
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();
}
}
package package-with-aidl-files;
parcelable MyParcelable;
package package-with-java-files;
public class MyParcelable implements Parcelable {
...
}
import package-with-java-files.MyParcelable; // IMPORTING REAL MyParcelable
...
void someMethod() {
List<MyParcelable> responses = interprocessCommunicator.getMyParcelables(); // CONFLICT
....
}
在我的java parcelable声明中(我称之为real 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();
}
}
package package-with-aidl-files;
parcelable MyParcelable;
package package-with-java-files;
public class MyParcelable implements Parcelable {
...
}
import package-with-java-files.MyParcelable; // IMPORTING REAL MyParcelable
...
void someMethod() {
List<MyParcelable> responses = interprocessCommunicator.getMyParcelables(); // CONFLICT
....
}
import-package-with-java-files.MyParcelable;//导入真正的MyParcelable
...
void方法(){
List responses=interprocessCommunicator.getMyParcelables();//冲突
....
}
我希望现在能更清楚地知道冲突在哪里:
在服务中,我返回package-with-java-files.MyParcelable列表,但AIDL接口要求package-with-AIDL-files.MyParcelable
在活动中也是如此
如何解决这些冲突?我无法在AIDL接口中导入真实的MyParcelable,也无法在活动/服务中导入AIDL MyParcelable
AIDL专家们,我需要你们的帮助!
提前谢谢
请不要将官方API指南链接到我这里,因为那里没有任何内容
AIDL只是一个工具,可以帮助您生成IPC所需的代理和存根的实际实现。它接受一个.aidl文件,并根据规则从中生成.java文件。这些.java文件是执行工作的实际代码。因此,.aidl文件可以想象成一种内部方式,帮助指定接口
因此,在您的情况下,“带有aidl文件的包”也将用于存储生成的.java文件。因此,“带有aidl文件的包”应该对应于“带有java文件的包”。希望这个解释能对你有所帮助 不能将AIDL定义存储在与实现不同的包中。如果您将
.java
和.aidl
文件并排放置,它就会工作