Почему и как push-уведомления (например, GCM) экономят заряд батареи?

Хотели понять основные причины того, что push-уведомления, такие как Google Cloud Messaging (ранее называвшиеся Google Cloud to Device Messaging), более экономичны для батареи, для связи в облаке ‹--> устройства?

На мой взгляд, альтернативные технологии включают «опрос» (через TCP/IP) при сохранении соединения в состоянии CONNECTED с использованием поддержки активности. Или есть что-то лучше?

Мое ограниченное понимание GCM заключается в том, что он также использует TCP/IP и поддержку активности, но клиент никогда не опрашивает сервер для получения статуса. Вместо этого сервер информирует клиента о входящем сообщении, а приложения, подписавшиеся на определенный тип сообщений, уведомляются об этом сообщении асинхронно. Кроме того, общее соединение GCM совместно используется несколькими приложениями, что позволяет электронике устройства переходить в спящий режим / режим гибернации в «скоординированное» время, при этом несколько приложений не поддерживают электронику более «включенной» (электрически активной), чем они должны быть. Это правильное понимание? Или есть что-то большее?

Наконец, как именно это соотносится с MQTT через TCP/IP с поддержкой активности? Каковы причины того, что MQTT (очевидно) менее эффективен, чем GCM?


person bdutta74    schedule 26.03.2014    source источник


Ответы (1)


Одной из основных причин его эффективности является то, что он хорошо масштабируется. Устройство Android поддерживает одно открытое соединение с серверами GCM для прослушивания уведомлений для ВСЕХ приложений на устройстве, а затем направляет сообщения в соответствующие приложения, для которых они предназначены. Это гораздо более масштабируемо и эффективно, чем держать открытое сетевое соединение для каждого отдельного приложения, которое хочет получать какие-то push-уведомления.

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

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

person Redth    schedule 10.04.2014
comment
Еще одна причина, по которой GCM, в частности, экономит заряд батареи, — это комбинация параметров сообщения crush_key и delay_while_idle. Когда имеет значение только последнее сообщение в последовательности сообщений (например, уведомления о счете в футбольном матче), бездействующие устройства не получают ненужных сообщений, а получают только самое последнее, когда устройство выходит из спящего режима. Старые сообщения заменяются новыми на сервере GCM, и доставляются только самые новые, что приводит к меньшему расходу заряда батареи. - person Piovezan; 17.08.2014