Пользователи зависят от своих телефонов и нуждаются в постоянно работающем устройстве. Однако иногда устройства перезагружаются, что вынуждает пользователей обращаться в службу поддержки или по гарантии. Этот процесс вызывает разочарование у пользователей и обходится дорого производителям устройств и операторам связи.
В Android 8.0 (уровень API 26) и выше есть функция, которая запускает процесс восстановления при обнаружении основных системных компонентов, застрявших в циклах сбоев. При этом сигнале функция Rescue Party выполняет ряд действий для восстановления устройства. В крайнем случае, Rescue Party перезагружает устройство в режим восстановления и предлагает пользователю выполнить сброс до заводских настроек.
Выполнение
Функция Rescue Party включена по умолчанию, и её реализация находится в файле /services/core/java/com/android/server/RescueParty.java . Rescue Party получает информацию о событиях загрузки и сбоя и запускается, если:
-
system_serverперезапускается более пяти раз за пять минут. - Постоянно аварийно завершающее работу системное приложение вылетает более пяти раз за 30 секунд.
Когда Rescue Party обнаруживает одну из таких ситуаций, она переходит на следующий уровень восстановления, обрабатывает задачу, связанную с этим уровнем, и позволяет устройству продолжить работу, чтобы проверить, восстановится ли оно. Каждый последующий уровень постепенно ужесточает меры по устранению неполадок или сбросу настроек. На последнем уровне пользователю предлагается выполнить сброс устройства до заводских настроек.
Для работы Rescue Party не требуется специальная аппаратная поддержка. Если такая поддержка реализована, система восстановления устройства должна отвечать на команду --prompt_and_wipe_data , а устройства должны предоставлять пользователям возможность подтвердить удаление пользовательских данных перед продолжением. Система восстановления также должна предоставлять пользователю возможность повторной попытки загрузки устройства.
Поскольку каждый уровень восстановления может добавлять до пяти минут до восстановления работоспособности устройства, производителям устройств не следует добавлять пользовательские уровни восстановления. Увеличение времени, в течение которого устройство не работает, повышает вероятность того, что пользователи обратятся в службу поддержки или по гарантии, вместо того чтобы самостоятельно восстановить его работоспособность.
Проверка
Rescue Party подавляет все события восстановления, когда устройство имеет активное USB-соединение для передачи данных, поскольку это является сильным сигналом того, что кто-то отлаживает устройство.
Чтобы отменить это ограничение, выполните:
adb shell setprop persist.sys.enable_rescue 1После этого может возникнуть цикл сбоев системы или пользовательского интерфейса:
Чтобы запустить цикл сбоев на низком уровне
system_server, выполните следующую команду:adb shell setprop debug.crash_system 1adb shell stopadb shell startЧтобы вызвать цикл сбоев SystemUI на промежуточном этапе, выполните следующую команду:
adb shell setprop debug.crash_sysui 1
Оба цикла сбоев запускают логику восстановления. Rescue Party также записывает все операции восстановления в постоянные журналы PackageManager, хранящиеся по адресу /data/system/uiderrors.txt , для последующего анализа и отладки. В отчетах об ошибках эти постоянные журналы также включаются в раздел предупреждающих сообщений пакета .