Помните adb, чтобы найти запись об ошибке сбоя приложения Android
Прежде всего, позвольте мне сказать о выводе, потому что такого рода проблемы будут возникать при нехватке памяти.На
мобильном телефоне Xiaomi есть такая настройка
, которая может во многом имитировать эту аномалию.Затем
мы установим размер лог логкэта.Если
у вас много операций то лучше всего Ну настройте его.Если вашу операцию можно воспроизвести за короткое время то настраивать не надо.256к хватит.Тогда подключите мобильник
к компьютер
и откройте инструмент командной строки, чтобы очистить журнал logcat.
adb logcat -c
Затем проверьте журнал
#需要打印时间和级别是Error的信息
adb logcat -v time *:E
Это просто чтобы распечатать лог по cmd.Скоро может не успеть,тогда качай лог.Прошлый лог не почистил?Выполним команду еще раз
adb logcat -v time >C:/Users/EDY/Desktop/work/logcat.txt
В это время лог logcat будет передаваться в локальный, но обратите внимание, после окончания операции можно закрыть окно adb, иначе он всегда будет писать лог в локальный файл в windows, и его не будет написано после закрытия.Затем
выполните поиск Ключевое слово «FATAL»
может найти сообщение об ошибке.Что касается реальной причины ошибки, вы должны позволить разработчикам увидеть ее.
Если вы столкнулись с ANR
, вы должны посмотреть журнал трассировки.Взяв
в качестве примера мобильные телефоны Xiaomi,
вы можете столкнуться с двумя проблемами.Во
-первых, все говорят, что adb pull /data/anr/traces.txt
но когда вы берете его сами,
выдает ошибку из-за разных мобильных телефонов.Имя файла производителя может быть разным
,но мы не знаем какой файл нам нужен,поэтому сначала пытаемся вытащить один,и нашли вторую проблему,недостаточно прав,тогда можно использовать это
adb bugreport
Он скажет вам, куда положить файл
, а затем разархивирует его, и в разархивированном файле будет все, что находится в каталоге anr.
Как определить, какой файл нам нужен Мы можем посмотреть на время журнала, чтобы увидеть, какой из них находится рядом с временем вашей операции Открыв его, посмотрите, не является ли это ошибкой, о которой сообщил ваш пакет Как определить,
где
ошибка сообщение:
Следующее содержимое принадлежит мне Прежде всего
, мы можем определить местоположение журнала ANR в соответствии с именем пакета приложения и временем возникновения ANR, обычно в верхней части содержимого трассировки.
Тогда ANR должно быть исключением основного потока, мы можем найти часть «основного» потока и проверить статус, связанный с основным потоком.
Вы можете четко видеть, что основной поток спит.Обычно в многопоточной разработке легче столкнуться с ANR, вызванным заблокированным состоянием.
Во-вторых, мы можем продолжать находить следующую информацию о стеке вызовов потоков.
Мы более знакомы с этой областью. Так же, как и при просмотре обычных исключений, мы можем четко знать, что ANR произошло в строке 28 MainActivity. Причина в Thread.sleep(). На данный момент мы возвращаемся к нашему собственному уровню кода выше, и результат очень очевиден.
Конечно, ANR в реальной разработке, как правило, не так просты, а некоторые не так просто проанализировать, поэтому каждый должен извлечь уроки из этой статьи, совместить фактическую разработку с дополнительным анализом и оптимизировать для увеличения собственных возможностей.
Состояние потока
Для приведенного выше состояния потока по сравнению с состоянием потока java Linux уточняет множество состояний, что упрощает анализ текущего состояния.
Потоки в java не эквивалентны потокам в ядре операционной системы. Между ними существует отношение сопоставления.Для Android существует отношение один к одному между потоками в java и потоками в ядре.