Спасательный отряд

Многие пользователи сильно зависят от своих телефонов и постоянно нуждаются в работающем устройстве. Однако иногда устройства зацикливаются на перезагрузке, из-за чего пользователи отправляют заявки в службу поддержки или запросы по гарантии. Этот процесс разочаровывает пользователей и дорог для производителей устройств и операторов связи.

В Android 8.0 есть функция, которая отправляет «спасательную группу», когда обнаруживает, что основные компоненты системы застряли в аварийных циклах. Затем Спасательная группа переходит к серии действий по возвращению устройства. В крайнем случае Rescue Party перезагружает устройство в режим восстановления и предлагает пользователю выполнить сброс настроек до заводских настроек.

Эти функции восстановления не требуются документом определения совместимости Android , но все же могут быть полезны для уменьшения числа обращений в службу поддержки.

Выполнение

Rescue Party включен по умолчанию в Android 8.0, а реализация находится в /services/core/java/com/android/server/RescueParty.java . Rescue Party получает информацию о событиях загрузки и сбоя и запускается, если:

  • System_server перезагружается более 5 раз за 5 минут.
  • Постоянное системное приложение выходит из строя более 5 раз за 30 секунд.

При обнаружении одной из таких ситуаций Rescue Party переходит на следующий уровень спасения, обрабатывает задачу, связанную с этим уровнем, и позволяет устройству продолжить работу, чтобы проверить, восстановится ли оно. Каждый уровень становится все более агрессивным в том, что он очищает или сбрасывает. На последнем уровне пользователю предлагается выполнить сброс настроек устройства до заводских.

Для поддержки Rescue Party не требуется никакой специальной аппаратной поддержки. Если она реализована, система восстановления устройства должна реагировать на команду --prompt_and_wipe_data , и устройства должны предоставить пользователям возможность подтвердить любое уничтожение пользовательских данных, прежде чем продолжить. Система восстановления также должна предоставить пользователю возможность попытаться загрузить свое устройство еще раз.

Поскольку каждый уровень восстановления может занять до 5 минут, прежде чем устройство снова станет работоспособным, производителям устройств не следует добавлять собственные уровни восстановления. Увеличение времени работы с неработоспособным устройством повышает вероятность того, что пользователи обратятся в службу поддержки или по гарантии вместо того, чтобы самостоятельно восстанавливать свое устройство.

Проверка

Все события восстановления подавляются, когда устройство имеет активное USB-соединение для передачи данных, поскольку это сильный сигнал о том, что кто-то занимается отладкой устройства.

Чтобы отменить это подавление, запустите:

adb shell setprop persist.sys.enable_rescue 1

Отсюда вы можете вызвать цикл сбоя системы или пользовательского интерфейса.

Чтобы вызвать низкоуровневый цикл аварийного завершения system_server , запустите:

adb shell setprop debug.crash_system 1

Чтобы вызвать цикл аварийного завершения SystemUI среднего уровня, запустите:

adb shell setprop debug.crash_sysui 1

Оба аварийных контура инициируют логику спасения. Все операции восстановления также записываются в постоянные журналы PackageManager, хранящиеся в /data/system/uiderrors.txt , для последующей проверки и отладки. Эти постоянные журналы также включаются в каждый отчет об ошибках в разделе «Предупреждающие сообщения пакета».