2011-10-26 13 views
8

Desidero sapere se l'avvio di un asynctask da un ricevitore di trasmissione è considerato una cattiva pratica? Fondamentalmente mi sono registrato con il server C2DM di google e poi quando intercetto il ricevitore broadcast registrato, voglio inviarlo al mio server.avvio di un asynctask da un ricevitore di broadcast

qual è il modo migliore per realizzare questo?

risposta

18

Sì, questo è considerato una cattiva pratica. Questo perché se avvii AsyncTask da BroadcastReceiver Android potrebbe terminare il processo se onReceive() viene restituito e non sono in esecuzione altri componenti attivi.

Il modo corretto sarebbe iniziare Service da BroadcastReceiver. E questo Service dovrebbe gestire AsyncTask. In questo modo, Android sarà a conoscenza del componente attivo e Android non lo ucciderà prematuramente (a meno che non si verifichino altre condizioni critiche, come le condizioni di memoria insufficienti).

+0

@inazruk grazie – Hades

+1

e se si dispone di un riferimento al contesto dell'applicazione nell'attività asincrona? il sistema potrebbe ancora terminare il processo una volta che onReceive() restituisce? – 500865

+0

La probabilità che il processo venga ucciso è del tutto irrilevante per chi ha fatto riferimento a cosa all'interno di questo processo. La probabilità di essere uccisi dipende in larga misura da quali componenti sono attualmente attivi nel processo e da quale fase del loro ciclo di vita sono attivi. – inazaruk

2

A partire da Honeycomb, è possibile chiamare goAsync() e quindi disporre di 10 secondi circa per eseguire il lavoro in modo asincrono.

Esempio di utilizzo può essere mostrato here.

Problemi correlati