I BroadcastReceivers di Android sono stati avviati in un nuovo thread?

Se ho una class interna che estende BroadcastReceiver all'interno della mia class di Service , dovrei preoccuparmi della sincronizzazione, quando la class BroadcastReceiver legge / scrive agli oggetti della class Service ? Oppure per metterlo in un altro modo: sono i methods onReceive() iniziati in un thread aggiuntivo?

  • Chiamare BroadCastReceiver dal servizio in android per aggiornare l'interface utente nel frammento?
  • Nessun metodo di questo tipo di metodo per scolbind la chiamata
  • Ricevitore Broadcast Registra in Manifest vs. Attività
  • PARTIAL_WAKE_LOCK vs SCREEN_DIM_WAKE_LOCK nel thread di download
  • Suppressa / Blocca BroadcastReceiver in un'altra app
  • Gestione di InterruptedException in attesa di un segnale di output (bug in Android?)
  • 4 Solutions collect form web for “I BroadcastReceivers di Android sono stati avviati in un nuovo thread?”

    Il metodo onReceive () viene sempre richiamato sul thread principale (che viene anche definito "thread UI"), a less che non sia stato richiesto di essere pianificato su un thread diverso utilizzando la variante registerReceiver ():

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

    I BroadcastReceivers di Android sono stati avviati in un nuovo thread?

    Di solito dipende tutto da come lo si registra.

    Se si registra il BroadcastReceiver utilizzando:

     registerReceiver(BroadcastReceiver receiver, IntentFilter filter) 

    Funzionerà nel thread di attività principale (thread aka UI) .

    Se si registra il BroadcastReceiver utilizzando un Handler valido in esecuzione su un thread diverso:

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

    Funzionerà nel context del tuo Handler

    Per esempio:

     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 

    Dettagli qui e qui .

    Il metodo onReceive () viene richiamato sul thread principale. Quindi, nel caso in cui tutto il tuo accesso alla class di servizio venga eseguito dall'interno del thread principale, non è necessaria alcuna sincronizzazione.

    Inoltre, è ansible specificare l'attributo elemento ricevente "android: process" nell'AndroidManifest.xml. Vedi qui . In questo modo è ansible specificare che il ricevitore funziona come un process separato e non è legato al thread UI principale.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.