web-dev-qa-db-ja.com

BroadcastReceiverに「goAsync」を使用するにはどうすればよいですか?

バックグラウンド

Honeycomb(API 11)以降、Androidには、broadcastReceiverを非同期で実行できるようにする機能があり、「」というメソッドを使用して、プロセスを強制終了できると想定する約10秒前に提供します。 goAsync ":

これは、onReceive(Context、Intent)内のアプリケーションによって呼び出され、その関数から戻った後もブロードキャストをアクティブに保つことができます。これにより、ブロードキャストに比較的応答する(10秒以内に終了する)という期待は変わりませんが、実装はそれに関連する作業を別のスレッドに移動して、ディスクIOによるメインUIスレッドのグリッチを回避できます。

問題

多くの場所で検索しましたが、使用方法のサンプルやチュートリアルは見つかりませんでした。

それだけでなく、メソッドはPendingIntentインスタンスを返しますが、これをどうすればよいかわかりません。

アクティブなブロードキャストの結果を表すBroadcastReceiver.PendingResultを返します。 BroadcastRecord自体はアクティブではなくなりました。すべてのデータおよびその他の相互作用は、BroadcastReceiver.PendingResultAPIを経由する必要があります。ブロードキャストの処理が完了したら、PendingResult.finish()メソッドを呼び出す必要があります。

質問

この方法をどのように使用しますか?

それによって返されるPendingIntentとは何ですか、それをどうすればよいですか?

20

あなたは簡単な説明を見つけることができます ここ

BroadcastReceivergoAsync()メソッド内の処理を別のスレッドにハンドオフする場合は、onReceive()を使用します。その後、onReceive()メソッドをそこで終了できます。保留中の結果は新しいスレッドに渡され、PendingResult.finish()を呼び出して、このレシーバーをリサイクルできることを実際にシステムに通知する必要があります。

例えば:

final PendingResult result = goAsync();
Thread thread = new Thread() {
   public void run() {
      int i;
      // Do processing
      result.setResultCode(i);
      result.finish();
   }
};
thread.start();
35
Broatian