2012-06-28 2 views
21

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

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

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

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

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

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

+0

Я пробовал это на Android 4.4.4. Я остановил WhatsApp form apps-> force stop. После этого я не получал никаких сообщений автоматически. Мне пришлось вручную запустить WhatsApp для получения любых сообщений. Это происходит только в версии 2.3.6? – RocketRandom

ответ

45

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

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

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

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

+1

Лучший ответ когда-либо! Спасибо за точный ответ herom! – cesarmax

+4

Добро пожаловать. Если этот ответ был полезен для вас, пожалуйста, отметьте его как правильный ответ (щелкнув по чеку), чтобы этот вопрос мог быть отмечен как закрытый;) – herom

+1

Ну, я реализовал GCM, но когда я закрыл службу, 't получать push-уведомление, поэтому я не думаю, что GCM помогает, даже если мы закрываем услугу и все еще получаем сообщение – Hunt

12

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

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

Официальная документация here.

+1

Одно из лучших решений, с которым можно согласиться. –

+0

Это [решение] (http://stackoverflow.com/questions/17768932/service-crashing-and-restarting#18199749) сделал мой день. –

3

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

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

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

+1

START_STICKY не перезапускает сервис в версии lollipop .. все работает –

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^