Сначала я подумал, что это, скорее всего, экземпляр Android-облака для обмена сообщениями между устройствами , но этого не может быть: WhatsApp не объявляет необходимые разрешения и работает в Eclair (Android 2.1), в то время как обмен сообщениями между облаками и устройствами ( и его замена Google Cloud Messaging) требует как минимум Froyo (Android 2.2).
Однако, скорее всего, это своего рода сервис push-уведомлений . Невозможно точно сказать, как это реализовано без доступа к исходному коду WhatsApp.
Однако относительно того, что он может получать сообщения, когда он не используется, относительно легко объяснить. В приложении почти наверняка есть служба, которая работает в фоновом режиме, чтобы периодически регистрироваться на сервере (или получать запрос сервера, или что-то еще). Когда вы получаете сообщение, сервис выскакивает уведомление.
Что касается вопроса о том, как сервер может сделать push, вот возможность (опять же, я не могу проверить без исходного кода):
- WhatsApp запускает и открывает два сокета: один для прослушивания и один для отправки сообщения на сервер.
- WhatsApps начинает прослушивать первый сокет.
- WhatsApp отправляет сообщение, содержащее ваш номер телефона и порт прослушивающего сокета, на сервер и ожидает подтверждения.
- Сервер записывает телефон и номера портов в сообщении и IP-адрес, с которого пришло сообщение.
- Сервер отправляет подтверждение приложению.
- Приложение получает подтверждение и закрывает сокет сообщения.
- Сообщение с вашим номером телефона в качестве пункта назначения поступает на сервер.
- Сервер использует IP-адрес и номер порта, которые он связал с вашим номером телефона, и использует эту информацию для отправки сообщения на ваш телефон.
Чтобы это работало, приложению необходимо будет отслеживать состояние сетевого подключения и сбрасывать сокет прослушивания / при необходимости повторно отправлять регистрационное сообщение (например, при изменении IP-адреса).