Как устойчивые соединения tcp/ip сохраняют батарею и уменьшают использование полосы пропускания?

В механизмах push-уведомлений, таких как служба уведомлений Apple Push, они используют постоянные IP-соединения.

Мой вопрос в том, как использовать постоянные соединения, экономя батарею и пропускную способность устройства? У меня создается впечатление, что, поскольку соединение является постоянным, устройство всегда использует радио Wi-Fi или 3G/LTE.

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

Аналогичный вопрос можно найти здесь:
Как Android C2DM улучшает использование полосы пропускания?
но я думаю, что ответов недостаточно.

Ответ 1

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

Например, если на вашем телефоне есть приложения Facebook, Instagram и Twitter, чтобы постоянно обновлять информацию, вы всегда будете иметь три сервера опроса приложений для изменений.

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

Ответ 2

Сначала вы должны учитывать государственный аппарат, реализованный устройствами для управления потреблением энергии из-за сетевой связи. Вы можете увидеть его здесь После прочтения вы увидите, что, как сказал Адам, создание соединений очень плохо для вас, срок службы батареи и опроса - это создание/уничтожение соединений.

Следовательно, C2DM избегает создания соединений для повышения энергопотребления. В итоге, сохранение происходит из-за:

  • Постоянное соединение не означает, что устройство всегда находится в состоянии полной мощности. Это означает, что соединение не закрывается, а затем сервер может отправлять сообщения клиенту.
  • C2DM предоставляет сообщения с различными механизмами, как вы можете прочитать в Расширенные темы GCM. Следовательно, он может быть настроен для доставки сообщений только тогда, когда устройства уже находятся в состоянии полной мощности.
  • Последним фактором является то, как GCM доставляет сообщения на незанятые устройства. В официальной документации это совершенно неясно, и я думаю, что исходный код для Службы Google Play недоступен. Тем не менее, вы можете получить некоторые подсказки со следующим ответом здесь. Первый комментарий кажется полезным.

Я не уверен, что я не уверен: я не знаю, как они поддерживают связь на низком уровне. Это то, что мне не хватает. Вы можете прочитать Android C2DM слайд 15 для некоторых объяснений. Кажется, что они обеспечивают какую-то умную обработку государственной машины.