Долгое постоянное TCP-соединение на Android

Я прочитал некоторые статьи в Интернете и некоторые вопросы о StackOverFlow, но никто не имеет определенного ответа на вопрос: а) Если Google использует Long Lived TCP-соединения для Gmail, Mail и т.д. b) Если вы используете его в пользовательское приложение разряжает срок службы батареи, и если это примерно так?

Ответы

Ответ 1

Ответ на ваш первый вопрос заключается в том, что, да, Google GTalkService поддерживает постоянное соединение XMPP с серверами Google на телефонах Android с установленными приложениями Google.

Что касается вашего второго вопроса, ответ на этот вопрос более сложный, чем некоторые из комментариев здесь, вы бы поверили. В частности, пакеты keepalive дополнительных подключений - или любые небольшие, но постоянно происходящие передачи данных - могут повлиять на ваш государственный цикл управления питанием 3G, что будет иметь заметное влияние на срок службы батареи.

См. эту статью для получения дополнительной информации:

https://labs.ericsson.com/developer-community/blog/smartphone-traffic-impact-battery-and-networks

Если возможно, вы можете использовать новый API обмена облаками для устройств, который копирует поверх GTalkService, позволяя вашему приложению получать уведомления без сохранения собственного TCP-соединения. Недостатком, к сожалению, является то, что C2DM не будет работать на чистом Android с открытым исходным кодом, он требует, чтобы пользователь был подписан в свою учетную запись Google, и он доступен только на Froyo или выше.

Ответ 2

Поддержание открытого соединения может переводить на меньшее использование ресурсов: небольшой трафик "trickle" может поддерживать открытое соединение.

Рассмотрим обратную ситуацию: клиент "опроса" сервера на регулярном интервале (принимает ту же самую "обновленную" скорость, что и для долгоживущего соединения "trickle" ): каждый раз при открытии нового соединения генерируется больше трафика.

Настройка соединения/отключение дорого (конечно, все относительно в этой вселенной; -).


Основные недостатки поддержания открытого соединения:

  • браузер клиентской стороны может быть ограничен количеством подключений на окно/вкладку и т.д.
  • промежуточные устройства (например, NAT, межсетевые экраны) не могут повторно использовать порт так часто, чтобы обслуживать другие запросы.

Ответ 3

  • Вы можете использовать инструмент, например tcpdump или wireshark, на вашем маршрутизаторе или другом компьютере, чтобы определить, как долго TCP-соединения остаются открытыми приложениями Google. Вам нужно будет фильтровать по интересующим вас портам или адресам.
  • Если вы используете Android 1.6, лучший способ определить утечку - использовать новый индикатор использования батареи. Просто установите свое приложение и посмотрите, что говорит монитор со временем.