安卓系统:如何取消/中断同步服务调用



对于Application对象,我调用bindService()onServiceConnected()回调接收一个IBinder对象,我将其交给AsyncTask

在那里,我通过调用ServiceClass.Stub.asInterface(iBinderObject)获得我的服务对象,并使用这个服务对象调用一些方法。

这是一个同步方法,我不会影响服务的超时设置(谁知道它的超时实现是否可靠)。因此,事先,我在一个单独的线程上postDelayed()我自己的超时处理程序。

超时代码调用unbindService()来解除应用程序与服务的绑定,并产生超时结果。

如果先超时,我还没有找到中断服务调用的方法。unbindService()对此没有明显影响。调用AsyncTask.cancel(true)也不会有任何改变。IBinder对象似乎没有提供任何明显的有帮助的方法。

我观察到的是,AsyncTask一直在等待服务调用的返回,这可能会大大延迟标准Executor下一个AsyncTask的启动。

有什么经验吗?想法?

正如其他人所指出的,同步调用不能中断。

如果这是一个问题,并且您在服务API的设计中有任何输入,那么您可以使用一对单向AIDL接口执行异步操作,如下所示:

package sample;
oneway interface IServer {
    void doWork(IClient cb);
}

package sample;
oneway interface IClient {
    void reportResult(String result);
}

相关内容

  • 没有找到相关文章

最新更新