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
여기 & 여기에 세부 사항 .