我有一个主应用程序和一个远程服务应用程序,使用AIDL相互连接。
我在远程服务中成功地进行了同步处理,但是如何才能进行异步处理呢?
我的AIDL文件是这样的:
import pack.addonlibrary.Action; /* parcelable */
interface IAddon {
void onBind();
void onUnbind();
int getCallbacks();
List<Action> onPageStarted(String url);
List<Action> onPageFinished(String url);
List<Action> onClicked(String url);
List<Action> onUserConfirm(boolean cancelled);
List<Action> onUserInput(String input, boolean cancelled);
}在我的远程服务中,我希望:
@Override
public List<Action> onClicked(String url) {
httpRequest() => onFinish() => showToastInClient(result)
//shows toasts in main app
}发布于 2015-12-07 21:41:45
您可以通过创建一个新的AIDL (用于回调)来异步实现AIDL,如下所示:
import pack.addonlibrary.Action;
oneway interface IAddOnCallback {
void handleOnClicked(List<Action> actionList);
}并通过将IAddon aidl类的onClicked方法从:
List<Action> onClicked(String url);至:
void onClicked(IAddOnCallback callback, String url);在连接到服务之后,在调用onClicked方法时,您可以实现回调对象,并将该对象发送到连接的服务。回调存根(客户端)可以实现为:
IAddOnCallback.Stub callback = new IAddOnCallback.Stub() {
@Override
public void handleOnClicked(List<Action> actionList) throws RemoteException {
// here you can perform actions
//shows toasts in main app
}
};这就是异步执行任务的方式。希望能有所帮助。
https://stackoverflow.com/questions/32363766
复制相似问题