对于Application对象,我打电话bindService()
。 onServiceConnected()
回调收到IBinder
对象,并将其交给AsyncTask
。Android:如何取消/中断同步服务呼叫?
在那里,我通过调用ServiceClass.Stub.asInterface(iBinderObject)
来获取我的服务对象,并使用此服务对象调用某种方法服务对象。
这是一个同步方法我不能影响服务的超时设置(谁知道它的超时的实现是否可靠)。所以,事先,我在自己的超时处理程序在一个单独的线程上。
超时代码调用unbindService()
将应用程序从服务中解除绑定并产生超时结果。
如果超时运行第一,我还没有找到一种方法来中断服务调用。对此,unbindService()
没有明显的影响。调用AsyncTask.cancel(true)
也不会改变。 IBinder
对象似乎没有提供任何可能有帮助的明显方法。
我观察到AsyncTask
一直在等待服务呼叫返回,这可以使标准Executor
显着延迟下一个AsyncTask
的开始。
任何经验?想法?
你有没有检查你的AsyncTask里面是否使用AsyncTask.isCancelled()来取消它。如果你使用它,你可以简单地完成你的AsyncTask, – 2013-02-12 15:20:52
@GauravArora感谢您的评论。正如我所说的,我想打断一个同步服务呼叫,我不能影响其中的代码。 – 2013-02-12 15:22:27
通常,不能取消同步呼叫。这就是为什么他们是同步的。但是你可以尝试在你的超时处理程序启动后停止服务。 – 2013-02-12 15:32:06