Как служба whatsapp перезапускается, даже если я заставляю остановить приложение?

Я запускаю whatsapp (мы могли бы назвать его appX с этого момента) на устройстве A. Я иду для управления приложениями → force close, поэтому appX закрывается, и я больше не вижу appX в качестве запущенных сервисов.

Теперь, через 5 минут, я отправляю сообщение с другого устройства appX (устройство B) на устройство A appX (тот, который мы его убили). Вот два сценария, которые я тестировал:

  • устройство A с Android 2.1: оно никогда не получает сообщение, поэтому можно сказать, что ни одна из приложений appX не была перезапущена. Он ТОЛЬКО принимает сообщение, если пользователь перезапустил приложение вручную.

  • устройство A с android 2.3.6: для НЕКОТОРНОЙ магической причины, независимо от того, сколько времени прошло с тех пор, как appX был убит, как только мы отправляем сообщение с устройства B → устройство A, оно получает сообщение, Служба appX перезапускается. Примечание: все время, когда appX был закрыт и БЕЗ получения какого-либо уведомления, я не смог увидеть какие-либо запущенные службы appX в управлении приложениями, поэтому это означает, что этот волшебный сервис перезапускается, как только он получает сообщение/уведомление

Я знаю, это звучит странно, и многие люди скажут, что это невозможно, но опять же, это было проверено на этих двух устройствах.

Я пытаюсь выполнить такое же поведение, поэтому любая помощь будет оценена им.

Ответ 1

Прежде чем вы начнете/прогоните этот ответ, пожалуйста, учтите, что ответ составляет почти 3 года (говоря о мае 2015 года), и все может изменились!

Я не думаю, что это волшебство, что здесь происходит! Это просто Android C2DM (см. https://developers.google.com/android/c2dm/), тогда как приложение имеет зарегистрированный Receiver для входящих Push-уведомлений и пробуждается этим сообщением. Android C2DM есть/был доступен с Android 2.2, поэтому причина того, что вы не можете видеть то же поведение на вашем устройстве с Android 2.1 и работать.

Кстати: как вы можете видеть, C2DM устарел с 26 июня 2012 года. Поэтому вместо C2DM следует использовать GCM (см. http://developer.android.com/guide/google/gcm/gs.html)

Полезный комментарий: GCM нуждается в доступном интернет-соединении. Вы можете использовать любой другой широковещательный приемник, такой как SMSReceiver, передав это ограничение.

Ответ 2

Начиная с Android 3.1 (API 12), , если приложение принудительно остановлено, оно не перезапустится, пока пользователь не запустит приложение вручную.

Это произойдет, даже если приложение содержит Service или активный BroadcastReceiver.

Вы можете найти официальную документацию здесь.

Ответ 3

У меня нет идеи о сервисе whatsApp.

Но возможно, что после приложения принудительной остановки перезапустите службу приложения.

Я использую START_STICKY сервис для моего chatApp. я должен сделать то же самое, поэтому я использую службу START_STICKY, поэтому, когда мое приложение убивает или принудительно прекращает установку, через несколько секунд моя служба перезагружается, и я могу войти на свой сервер xmpp и получить входящее сообщение.

Ответ 4

его ничего магического здесь appX использует push-уведомления через платформу Android android GCM https://developer.android.com/google/gcm/index.html в GCM, регистры приложений для приемника braodcast и широковещательного приемника запускает службу при получении push-уведомления. Android GCM зависит от сервисов Google Play, доступных в Android 2.2 и выше, поэтому вы не видели сообщение на устройстве 2.1