Долгое постоянное 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, лучший способ определить утечку - использовать новый индикатор использования батареи. Просто установите свое приложение и посмотрите, что говорит монитор со временем.