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

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

Android 8.0 включает в себя функцию, которая отправляет «спасательный отряд», когда замечает, что основные компоненты системы застряли в циклах сбоя. Затем Rescue Party выполняет ряд действий по восстановлению устройства. В крайнем случае 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 для последующей проверки и отладки. Эти постоянные журналы также включаются в каждый отчет об ошибке в разделе «Предупреждающие сообщения пакета».