В ходе ежедневного бизнес-тестирования мы часто обнаруживаем задержки перехода страниц, задержки скольжения и другие проблемы с задержками. Однако, когда часто возникают проблемы с задержками, нет конкретной информации, которую можно было бы предоставить студентам-разработчикам для устранения проблемы, поэтому ее оставляют в покое.
В этой статье президент использует BlockCanary для проверки зависаний приложений и отчетов журналов.
Blockcanary — это инструмент, разработанный @markzhai для обнаружения задержек основного потока приложения. Он может обнаруживать задержки без необходимости использования инструментов или отладки кода в коде.
https://github.com/markzhai/AndroidPerformanceMonitor
implementation 'com.github.markzhai:blockcanary-android:1.5.0'
Создайте новый AppBlockCanaryContext, который наследует BlockCanaryContext и переопределяет несколько методов:
provideQualifier: Получить информацию о версии приложения
provideUid: Получить идентификатор пользователя
provideNetworkType: Получить тип сети
provideMonitorDuration: Установите продолжительность мониторинга, например: 100000 мс.
provideBlockThreshold: Установите порог задержки мониторинга, например: 1000 мс.
providePath: Установите адрес сохранения журнала, eg:BlockTest
displayNotification: Установите, будет ли отображаться на рабочем столе, например: true or false
Обычно он регистрируется в onCreate в приложении, например:
BlockCanary.install(this,new AppBlockCanaryContext()).start();
# здесь Инициализировать Блок Канарейка
Однако при использовании targetdk24 некоторые разрешения приложения отсутствуют в приложении, а помещаются в WelcomeActivity для подачи заявки на разрешения, поскольку при записи задержки в файл журнала требуются разрешения на чтение и запись на SD-карту. Блок Если Канарейка установлена относительно рано и не имеет разрешения на чтение или запись SD-карты, будет сообщено об ошибке. Поэтому инициализацию BlockCanary необходимо отложить.
@NeedsPermission({Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE})
void initAfterPhonePermission() {
PermissionsUtil.getInstance().resetGotoSetting();
initAfterPermission();
BlockCanary.install(this, new AppBlockCanaryContext()).start();
new BlockThread().start();
}
В соответствии с приведенным выше кодом конфигурации и пакетом приложения выполните тестирование вручную. Если основной поток зависает более чем на 1000 мс, в каталоге sdcard/BlockTest мобильного телефона будет создан журнал зависания.
Застрявший файл содержит несколько пунктов:
Предыдущий метод журналов задержек требовал подключения к устройству и экспорта журнала вручную для анализа или отображения его во всплывающем окне задержки. Это не позволяло сохранять журнал и последующий анализ данных.
Напишите метод post в клиентском коде, чтобы загрузить журнал в наш внутренний интерфейс и сохранить журнал.
Есть два способа сканирования логов: подтема Сканирование и загрузка по расписанию и загрузка приложения в фоновом режиме.
После запуска подпотока журнал застреваний можно регулярно сканировать и составлять отчеты.
Вышеупомянутый метод сканирования по расписанию потребует определенного количества ресурсов ЦП и памяти. Так что вы можете использовать Поместите приложение в фоновый режим для загрузки, эта операция будет не очень частой.
Мы моделируем демонстрационный проект для имитации задержки, нажимаем кнопку блокировки и засыпаем на 2 секунды, чтобы моделировать задержку.
Журнал Катона: