2012-11-28 9 views
26

Stavo usando Context.registerReceiver(), Context.sendBroadcast(Intent) , and Context.unregisterReceiver()LocalBroadcastManager vs Context.registerReceiver(), Context.sendBroadcast (Intent) e Context.unregisterReceiver() sono gli stessi?

ma quando ho visto la classe LocalBroadcastManager, ha registerReceiver(), sendBroadcast(Intent) , e unregisterReceiver() come in Context.

Sono confuso. Quando dovrei usare lo LocalBroadcastManager? sono uguali in Context?

saluti,

Grazie ...

risposta

45

LocalBroadcastManager è come dice il nome, un'implementazione dei metodi di trasmissione che sono solo a disposizione per la vostra applicazione. Questo ha alcuni vantaggi, con la più grande sicurezza, una falla in meno a cui fare attenzione. In termini di attuazione, ci sono alcune cose da tenere a mente:

  • questa classe viene dalla Android di sostegno Biblioteca
  • Il metodo le chiamate devono essere preceduti LocalBroadcastManager.getInstance([CONTEXT]) dove [CONTEXT] è una sottoclasse della classe Context , come Attività.
  • Quando si utilizza questa classe, è puramente per l'app. Usarlo per registrare i ricevitori e fare trasmissioni a livello di sistema non funzionerà.

Quindi questa classe non è la stessa di Contesto, è semplicemente un'implementazione molto specifica, solo per l'app, dei metodi di ricezione/trasmissione di Context. Dovresti usarlo quando non è assolutamente necessario che l'ascoltatore ascolti su trasmissioni globali (a livello di sistema) e quando la tua trasmissione non ha bisogno di indirizzare alcunché all'esterno della tua app.

+4

Se ricordo bene, è anche più efficiente di un normale 'BroadcastReceiver'. – Luksprog

+1

Seguendo il commento di @ Luksprog, è più efficiente in quanto evita il sovraccarico IPC poiché è limitato alla procedura dell'app. – woot

+1

note LocalBroadcastManager non può inviare una trasmissione persistente – Fabricator

Problemi correlati