BroadcastReceiver.onReceiveは常にUIスレッドで実行されますか?
通常は、登録方法によって異なります。
BroadcastReceiver
を使用して登録した場合:
registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
メインアクティビティスレッド(別名UIスレッド)で実行されます。
別のスレッドでBroadcastReceiver
有効なHandler
実行を使用して登録した場合:
registerReceiver (BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)
それはあなたのコンテキストで実行されます Handler
例えば:
HandlerThread handlerThread = new HandlerThread("ht");
handlerThread.start();
Looper looper = handlerThread.getLooper();
Handler handler = new Handler(looper);
context.registerReceiver(receiver, filter, null, handler); // Will not run on main thread
詳細はこちらとこちら。