Уменьшает ли Android скорость загрузки при выключении экрана?

Я заметил, что могу быстрее загрузить файл, если я использую wget с экраном в приложении, который приобретает экран с блокировкой тумана после замораживания, чем делать то же самое без этого приложения и выключив экран. Я загрузил точно такой же файл (с моего веб-сервера apache), и время почти в два раза быстрее, когда я использовал экран на приложении. Чтобы загрузить файл, я использую портированные версии wget.. И вот мой вопрос:

Снижает ли Android скорость загрузки при выключении экрана?

Или из-за того, что экран на приложении приобретает блокировку слежения, заставляет ЦП всегда быть включенным, поэтому для процесса загрузки затрачивается больше циклов ЦП. Я немного смущен.

Ответ 1

Короткий ответ да, Android иногда снижает скорость загрузки, когда экран отключается. Согласно этот отчет об ошибке Android (снят 90 пользователями),

Похоже, что даже если "Политика сна Wifi" установлена ​​на "Никогда", Wi-Fi на некоторых устройствах Android перейдет в режим энергосбережения (режим A.k.a. PSP), когда экран выключится.

Режим PSP, по-видимому, заставляет устройство Wi-Fi спать, но периодически просыпаться и запрашивать его точку доступа для доставки пакетов, адресованных устройству во время сна. Это обязательно вызывает дополнительную "колючую" латентность сети. Эта дополнительная задержка означает, что некоторые сетевые приложения испытывают проблемы при выключении экрана.

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

Как решить эту проблему

Для Android 2.3 есть обходное решение: вам нужно приобрести WIFI_MODE_HIGH_PERF lock:

В этом режиме блокировки Wi-Fi Wi-Fi будет активен, как в режиме WIFI_MODE_FULL, но он работает с высокой производительностью с минимальной потерей пакетов и низкой задержкой пакетов, даже когда экран устройства выключен. Этот режим будет потреблять больше энергии и, следовательно, должен использоваться только тогда, когда есть необходимость в таком активном соединении.

масштабирование часов процессора в Android

Android основан на ядре Linux и использует CPUFreq Governors для настройки частоты процессора для сохранения батареи. Точные политики и частоты варьируются от поставщика к поставщику и могут быть изменены. Существуют также утилиты, которые позволяют вам настраивать эти политики, но для них требуется встроенный телефон. Как правило, телефоны Android уменьшают частоту процессора и используют "powerave" регулятор, когда экран выключен.

Однако, я не думаю, что сетевой трафик на телефоне связан с ЦП. То есть даже в режиме энергосбережения пропускная способность сети является узким местом, а не скоростью процессора.