UIスレッド(ランナブル)よりも別のスレッドでブロードキャスト(私の場合はACTION_APPWIDGET_UPDATE)を送信する方が(パフォーマンスのために)良いですか?それとも、UI スレッドでこれを行うことは許容されるのでしょうか?
5 に答える
sendBroadcastのドキュメントを読むことができます:
この呼び出しは非同期です。すぐに戻り、レシーバーが実行されている間も実行を続けます。
そのため、UI スレッドで呼び出すことは完全に安全です
ブロードキャストは常に非同期で送信されます。UI スレッドのブロックを避けるために別のスレッドで実行する必要はありません。sendBroadcast() はすでにノンブロッキングです。sendBroadcast のドキュメントから:
public abstract void sendBroadcast (Intent インテント)
指定されたインテントを関連するすべての BroadcastReceiver にブロードキャストし、オプションで必要なアクセス許可を適用できるようにします。この呼び出しは非同期です。すぐに戻り、レシーバーが実行されている間も実行を続けます...
ブロードキャストの送信は、時間のかかる (長時間実行される) プロセスではありません。したがって、メイン スレッド (UI スレッド) からブロードキャストを送信することもできます。
ご存じのように、BroadcastReceiver.onReceive は常に UI スレッドで実行されます。レシーバーを動的に登録すると、別のスレッドが onReceive() を処理するように指定できます。これは、registerReceiver() の Handler パラメーターを介して行われます。
したがって、できればUIを使用する必要があります。