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