Un objet BroadcastReceiver
n'est valide que pendant la durée de l'appel à onReceive(). Une fois que votre code revient de cette fonction, le système considère que l'objet est terminé et n'est plus actif. Il est donc logique d'utiliser un AsyncTask
ou un Thread
ici.
également de la documentation:
vous ne pouvez pas, en particulier, afficher une boîte de dialogue ou se lient à un service à partir d'un BroadcastReceiver.
Si cette BroadcastReceiver a été lancé par une balise <receiver>
, l'objet ne soit plus en vie après le retour de cette fonction. Cela signifie que vous ne devez pas effectuer d'opérations qui vous renvoient un résultat de manière asynchrone - en particulier, pour interagir avec les services, vous devez utiliser startService()
au lieu de bindService()
. Si vous souhaitez interagir avec un service qui est en cours d'exécution, vous pouvez utiliser peekService()
Ce que cela signifie est que vous pouvez startService()
de votre RCVR de diffusion, transmettre les données nécessaires à l'exploitation de votre réseau à travers une intention. Le service fera l'opération de réseau. Si le service est collant, vous pouvez utiliser peekService()
. Mais jamais vous ne devriez bindService()
à un Broadcast rcvr.
duplication possible de [Android: AsyncTask vs Service] (http://stackoverflow.com/questions/6957775/android-asynctask-vs-service) –
Je dirais que ce n'est pas un doublon, il y a des considérations spécifiques lors de l'utilisation un BroadcastReceiver. Dans ce cas précis, un service doit être utilisé. –