Разряженная батарея Android MultitentService

У меня есть приложение, которое запускает два IntentService. Я выполнил некоторые измерения тока утечки и обнаружил, что если я запускаю один сервис, который выполняет аудиозапись и анализ звука, то ток потребления составляет около 65 мА. Если я запускаю другой, который выполняет сканирование BLE, ток утечки составляет около 85 мА. Если два IntentService работают одновременно, у меня ток утечки 200 мА. Я измерял это на Samsung SIII с Android 4.3. Также в Nexus 5 Android 4.4.2 батарея разряжается, когда две службы работают вместе. Я не использую WakeLock. Есть ли объяснение этому? Можно ли сэкономить заряд батареи? Два IntentService вообще не используют сетевое соединение, они не отправляют данные.

1 ответ

По мере увеличения вычислительной нагрузки система и ЦП реагируют, регулируя количество активных ядер и тактовую частоту этих ядер. Две задачи (намерения) конкурируют за доступ к памяти, могут вызывать промахи в кеше, и мы добавляем к этому запросы ввода-вывода; сложность операции не зависит от суммы этих частей линейно.

Планирование процессов — довольно сложный вопрос. Linux, лежащий в основе Android, изначально был разработан для экономии времени, а не для энергосбережения. Сокращение времени работы было основной задачей при его разработке, а также остается таковой в знаменитом исследовании «Десятилетие потраченных впустую ядер» (DOI 10.1145/2901318.2901326).

Я бы поставил на частоту процессора как на злодея. Никакой уверенности (извините); но другая статья, опубликованная через несколько лет после того, как этот вопрос был опубликован здесь, идет в том же направлении (в ней описываются тесты на Nexus 7, в вопросе упоминается Nexus 5): DOI 10.1109/CANDARW.2018.00112.

Другие вопросы по тегам