Are Android's BroadcastReceivers started in a new thread?

前端 未结 5 1306
难免孤独
难免孤独 2020-12-05 00:01

If I have an inner class that extends BroadcastReceiver within my Service class, should I care about synchronization, when the BroadcastRecei

5条回答
  •  [愿得一人]
    2020-12-05 00:51

    Are Android's BroadcastReceivers started in a new thread?

    Usually but not always, it all depends on how you register it.

    If you register your BroadcastReceiver using:

    registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
    

    It will run in the main activity thread(aka UI thread).

    If you register your BroadcastReceiver using a valid Handler running on a different thread:

    registerReceiver (BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)
    

    It will run in the context of your Handler

    For example:

    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
    

    Details here & here.

提交回复
热议问题