Чтение данных из сокета, если новые данные поступают в Android - PullRequest
3 голосов
/ 08 августа 2011

У меня есть приложение, которое общается с сервером. Я хочу, чтобы мое приложение считывало ТОЛЬКО входной поток сокета, когда для извлечения доступны новые данные.

В настоящее время я создаю таймер, который запланировал чтение входного потока сокета каждые 20 мс (опрос) с использованием класса SocketChannel java.nio.channels. Это не так хорошо, потому что это закончится чтением сокета, даже если нет доступных данных. И он быстро разряжает батарею.

Существует ли API для Android, который будет сообщать или отправлять флаг подключенному клиенту всякий раз, когда будут доступны новые данные, так что это единственный раз, когда я буду читать входные данные?

1 Ответ

2 голосов
/ 08 августа 2011

См. это , но краткий ответ - нет, для этого нет API. Кстати, SocketChannel / Selector на самом деле не будет читать сокет, если нет данных, просто проверьте его состояние.

Для push-уведомлений вы можете проверить Платформа Android Cloud to Device Framework . AFIAK, он реализован аналогичным образом: они держат сокет открытым и отправляют уведомления по мере доступности. Скорее всего, он уже настроен на низкое энергопотребление и является частью ОС, поэтому стоит попробовать (2.2 и выше).

...