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