web-dev-qa-db-fra.com

Comment le service WhatsApp est-il redémarré même si je force l'arrêt de l'application?

J'exécute WhatsApp (nous pourrions l'appeler désormais appX) dans le périphérique A. Je vais gérer les applications -> forcer la fermeture pour que appX soit fermé et je ne vois plus appX comme des services en cours d'exécution.

Maintenant, après 5 minutes, j'envoie un message de l'appX d'un autre appareil (appareil B) à l'appareil A appX (celui que nous avons tué). Voici les 2 scénarios que j'ai testés:

  • appareil A avec Android 2.1: il ne reçoit jamais le message, par conséquent, nous pouvons dire qu'aucun des services appX n'a ​​été redémarré. Il ne reçoit le message que si l'utilisateur redémarre manuellement l'application manuellement.

  • appareil A avec Android 2.3.6: pour QUELQUE raison magique, peu importe depuis combien de temps l'appX a été tué, dès que nous envoyons le message de l'appareil B -> l'appareil A reçoit le message , par conséquent, le service appX est redémarré. Remarque: tout le temps que appX a été fermé et SANS recevoir de notification, je n'ai pu voir aucun service en cours d'exécution d'appX dans la gestion des applications, ce qui signifie que ce service magique est redémarré dès que lorsqu'il reçoit un message/une notification

Je sais que cela semble bizarre, et beaucoup de gens diront que c'est impossible, mais encore une fois, cela a été testé sur ces 2 appareils.

J'essaie d'accomplir ce même comportement, donc toute aide sera appréciée.

25
cesarmax

Avant de voter pour/contre cette réponse, veuillez tenir compte du fait qu'elle a presque 3 ans maintenant (en parlant de mai 2015) et que les choses ont peut-être changé!

Je ne pense pas que ce soit magique ce qui se passe ici! C'est juste Android C2DM (voir: https://developers.google.com/Android/c2dm/ ), alors que l'application a un Receiver enregistré pour les notifications push entrantes et est réveillé par ce message. Android C2DM est/était disponible avec Android 2.2, c'est la raison pour laquelle vous ne pouvez pas voir la même chose) comportement sur votre appareil avec Android 2.1 en place et en cours d'exécution.

Au fait: comme vous pouvez le voir, le C2DM est obsolète depuis le 26 juin 2012. Donc, au lieu du C2DM, on devrait utiliser GCM (voir: http://developer.Android.com/guide/google/gcm/ gs.html )

Commentaire utile: GCM a besoin d'une connexion Internet disponible. Vous pouvez utiliser n'importe quel autre récepteur de diffusion tel que SMSReceiver en dépassant cette limitation.

47
herom

À partir de Android 3.1 (API 12), si une application est arrêtée de force, elle ne redémarrera pas tant que l'utilisateur exécute à nouveau manuellement l'application .

Cela se produira même si l'application contient un Service ou un BroadcastReceiver actif.

Vous pouvez trouver la documentation officielle ici .

12
bonnyz

je n'ai aucune idée du service WhatsApp.

Mais il est possible qu'après l'arrêt forcé de l'application, redémarrez le service de l'application.

j'utilise START_STICKY le service pour mon chatApp. je dois faire la même chose, donc j'utilise le service START_STICKY, donc quand mon application tue ou force à s'arrêter, après quelques secondes, mon service redémarre et je peux me connecter à mon serveur xmpp et recevoir le message entrant.

2
Lokesh

son rien de magique ici appX utilise des notifications Push via Android GCM https://developer.Android.com/google/gcm/index.html dans GCM, l'application enregistre pour un récepteur braodcast et le récepteur de diffusion démarre le service lors de l'obtention de la notification Push. Android GCM dépend des services google play disponibles sur Android 2.2 et au-delà de cela, vous n'avez donc pas vu le message sur l'appareil 2.1

1
Pramod Yadav