Итак, у меня есть Service
, который важен для логики приложений c и, следовательно, должен быть живым все время. Первое, во-первых, я создал его как foreground service
.
Когда пользователь начинает работать, Service
начинает делать много тяжелых вещей. Он использует FusedLocationAPI
датчики различного типа и выполняет много разных вычислений. В этот момент телефон начинает нагреваться (загрузка процессора высокая). Когда работа останавливается, нагрев останавливается и процессор падает ниже.
Это заставляет меня думать, что основная проблема заключается в том, что всякий раз, когда используются эти датчики и производятся вычисления, но есть много возможностей, которые могут вызвать это, и я хотел понять, как я могу глубоко проанализировать использование жидкого теста в этом дело? Я прочитал, что Battery Historian
должно быть способом go, но информация там сложная и не дает мне много информации. Как я могу использовать эти данные, чтобы понять, какая часть класса / runnable / code отвечает за использование процессора? Может быть, есть лучшие способы решить эту проблему? Заранее спасибо.
Подробный анализ того, что происходит с использованием CPU Profiler (после предложения).
- Образ. Приложение открыто, и несколько разных экранов переключаются между ними. Ничего особенного. Телефон не нагревается и из анализа процессора все также выглядит довольно хорошо.
2. Пользователь начинает работать и вводить тяжелое состояние. Желтый (светло-зеленый) прямоугольник показывает ранее упомянутый «важный сервис», который вносит важную роль в приложение. Вызываемые функции не используют слишком много времени процессора, учитывая% от всего рабочего цикла - что заставляет меня задуматься, я должен искать в другом месте ..
- То, что я видел, это то, что процессор сильно увеличивается, когда я блокирую телефон (во время работы службы. Из анализа процессора
Bottom Up
я не могу понять, что является причиной проблемы (оранжевый прямоугольник) - выглядит как * * * * * * * * * * Из профилировщика процессора я понимаю, что у меня есть серьезная проблема, связанная с использованием процессора, но сейчас я не понимаю что его вызывает (какой кусок кода / класса / функции). Я знаю, что всякий раз, когда создается моя важная служба (при запуске приложения), я использую PARTIAL_WAKE_LOCK
, чтобы не дать процессору go спать, а также сделать службу чтобы быть живым все время. Как я понимаю, мне нужно найти другое решение для этого, потому что процессор разряжает слишком много батареи.
Как я мог найти это, используя только профилировщик ? Я теперь этот факт только для кода и стека профилировщика не говорит мне много об этом (может быть, я не смотрю в нужном месте?)