Application オブジェクトについては、 を呼び出しますbindService()
。onServiceConnected()
コールバックはオブジェクトを受け取り、それIBinder
を に渡しAsyncTask
ます。
そこで、呼び出してサービス オブジェクトを取得し、このサービス オブジェクトServiceClass.Stub.asInterface(iBinderObject)
を使用して何らかのメソッドを呼び出します。
これは同期メソッドであり、サービスのタイムアウト設定に影響を与えることはできません(そして、タイムアウトの実装が信頼できるかどうかは誰にもわかりません)。そのため、事前にpostDelayed()
、別のスレッドで独自のタイムアウト ハンドラーを作成します。
タイムアウト コードはunbindService()
、アプリケーションをサービスからバインド解除するために呼び出し、タイムアウトの結果を生成します。
タイムアウトが最初に実行された場合にサービス呼び出しを中断する方法が見つかりませんでした。これunbindService()
に関しては、目に見える効果はありません。呼び出しAsyncTask.cancel(true)
ても何も変わりません。このIBinder
オブジェクトは、役立つ可能性のある明確なメソッドを提供していないようです。
私が観察したことは、AsyncTask
がサービス コールが返されるのを待機し続けることです。これAsyncTask
により、標準では次の開始が大幅に遅れる可能性がありますExecutor
。
経験はありますか?アイデア?