對於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