Я сталкиваюсь с повторяющейся проблемой, когда мое приложение для Android вызывает высокую загрузку ЦП и нагрев устройства, особенно когда работают фоновые службы.
Приложение включает в себя несколько фоновых компонентов, таких как:
Сервисы переднего плана (получение информации об устройстве, местоположении, SMS, журналов вызовов и т. д.)
RxJava Observables и сопрограммы (выполнение периодических задач)
Операции чтения/записи базы данных помещений
Задания WorkManager (для периодической синхронизации)
Со временем я заметил:
Загрузка процессора возрастает до 300–800 % при максимальной производительности -H.
Температура устройства быстро возрастает (особенно на телефонах среднего класса).
Батарея разряжается быстрее, чем ожидалось.
Трассы ANR показывают несколько активных потоков в DefaultDispatcher или RxComputationThreadPool.
Некоторые тяжелые операции перенесены из основного потока в Dispatchers.IO или ограничены планировщики.
Добавлены задержки между периодическими синхронизациями, чтобы избежать дублирования.
Использовались lifecycleScope и viewModelScope, чтобы избежать неограниченных сопрограмм.
Снижена частота WorkManager и добавлены ограничения.
Отслеживается с помощью Android Profiler, трассировки ЦП и памяти.
Тем не менее, проблемы с процессором и температурой сохраняются.
Что мне хотелось бы знать:
Какой наиболее надежный способ определить точную функцию или поток, вызывающие высокую загрузку процессора или перегрев?
Как я могу обнаружить взрыв потока или чрезмерное создание сопрограмм во время выполнения?
Каковы лучшие методы для профилирования, оптимизации и снижения нагрева в приложениях, которые полагаются на несколько фоновых служб и на основе Rx/Coroutine петли синхронизации?
Я сталкиваюсь с повторяющейся проблемой, когда мое приложение для Android вызывает [b]высокую загрузку ЦП и нагрев устройства[/b], особенно когда работают фоновые службы. Приложение включает в себя несколько фоновых компонентов, таких как: [list] [*]Сервисы переднего плана (получение информации об устройстве, местоположении, SMS, журналов вызовов и т. д.)
[*]RxJava Observables и сопрограммы (выполнение периодических задач)
[*]Операции чтения/записи базы данных помещений
[*]Задания WorkManager (для периодической синхронизации)
[/list] Со временем я заметил: [list] [*]Загрузка процессора возрастает до 300–800 % при максимальной производительности -H.
[*]Температура устройства быстро возрастает (особенно на телефонах среднего класса).
[*]Батарея разряжается быстрее, чем ожидалось.
[*]Трассы ANR показывают несколько активных потоков в DefaultDispatcher или RxComputationThreadPool.
[*]Некоторые тяжелые операции перенесены из основного потока в Dispatchers.IO или ограничены планировщики.
[*]Добавлены задержки между периодическими синхронизациями, чтобы избежать дублирования.
[*]Использовались lifecycleScope и viewModelScope, чтобы избежать неограниченных сопрограмм.
[*]Ограничено Пулы потоков RxJava ([code]Schedulers.io()[/code] заменен на собственный AppSchedulers.ioBounded).
[*]Снижена частота WorkManager и добавлены ограничения.
[*]Отслеживается с помощью Android Profiler, трассировки ЦП и памяти.
[/list] Тем не менее, проблемы с процессором и температурой сохраняются.
[b]Что мне хотелось бы знать:[/b] [list] [*]Какой [b]наиболее надежный способ определить[/b] точную функцию или поток, вызывающие высокую загрузку процессора или перегрев?
[*]Как я могу обнаружить [b]взрыв потока[/b] или чрезмерное создание сопрограмм во время выполнения?
[*]Каковы [b]лучшие методы[/b] для профилирования, оптимизации и снижения нагрева в приложениях, которые полагаются на несколько фоновых служб и на основе Rx/Coroutine петли синхронизации?