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?

  • Quando possiamo usare runOnUiThread nell'applicazione android?
  • Perché la maggior parte dei framework UI sono filettati singolarmente?
  • Come si riceve una chiamata in output in broadcastreceiver
  • Modello corretto per acquisire un WakeLock in un BroadcastReceiver e rilasciarlo in un servizio
  • Notifica che non viene rimossa quando si fa clic sul button di azione anche dopo aver fornito l'ID di notifica
  • Come call periodicamente AsyncTasks
  • 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.