对于 Application 对象,我调用bindService()
. onServiceConnected()
回调接收一个IBinder
对象,我把它交给一个AsyncTask
.
在那里,我通过调用并使用此服务对象ServiceClass.Stub.asInterface(iBinderObject)
调用一些方法来获取我的服务对象。
这是一种同步方法,我无法影响服务的超时设置(谁知道它的超时实现是否可靠)。所以,事先,我postDelayed()
在一个单独的线程上拥有自己的超时处理程序。
超时代码调用unbindService()
以解除应用程序与服务的绑定并产生超时结果。
如果超时先运行,我还没有找到中断服务调用的方法。对此unbindService()
没有明显的影响。呼叫AsyncTask.cancel(true)
也不会改变任何事情。该IBinder
对象似乎没有提供任何可能有帮助的明显方法。
我观察到的是AsyncTask
一直在等待服务调用返回,这可能会AsyncTask
显着延迟下一个标准的开始Executor
。
有什么经验吗?想法?