首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android异步AIDL

Android异步AIDL
EN

Stack Overflow用户
提问于 2015-09-03 05:53:48
回答 1查看 2.3K关注 0票数 1

我有一个主应用程序和一个远程服务应用程序,使用AIDL相互连接。

我在远程服务中成功地进行了同步处理,但是如何才能进行异步处理呢?

我的AIDL文件是这样的:

代码语言:javascript
复制
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);  

}

在我的远程服务中,我希望:

代码语言:javascript
复制
@Override
public List<Action> onClicked(String url) {   
  httpRequest() => onFinish() => showToastInClient(result)
  //shows toasts in main app
}
EN

回答 1

Stack Overflow用户

发布于 2015-12-07 21:41:45

您可以通过创建一个新的AIDL (用于回调)来异步实现AIDL,如下所示:

代码语言:javascript
复制
import pack.addonlibrary.Action;

oneway interface IAddOnCallback {

    void handleOnClicked(List<Action> actionList);
}

并通过将IAddon aidl类的onClicked方法从:

代码语言:javascript
复制
List<Action> onClicked(String url);

至:

代码语言:javascript
复制
void onClicked(IAddOnCallback callback, String url);

在连接到服务之后,在调用onClicked方法时,您可以实现回调对象,并将该对象发送到连接的服务。回调存根(客户端)可以实现为:

代码语言:javascript
复制
 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
    }
};

这就是异步执行任务的方式。希望能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32363766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档