Los usuarios dependen de sus teléfonos y necesitan que funcionen en todo momento. Sin embargo, a veces, los dispositivos terminan en bucles de reinicio, lo que provoca que los usuarios presenten tickets de asistencia o consultas sobre la garantía. Este proceso es frustrante para los usuarios y costoso para los fabricantes de dispositivos y las empresas de telefonía celular.
Android 8.0 (nivel de API 26) y versiones posteriores incluyen una función que activa un proceso de rescate cuando detecta componentes principales del sistema atascados en bucles de falla. Cuando se recibe esta señal, la función Grupo de rescate aumenta a través de una serie de acciones para recuperar el dispositivo. Como último recurso, Rescue Party reinicia el dispositivo en modo de recuperación y le solicita al usuario que restablezca la configuración de fábrica.
Implementación
Rescue Party está habilitado de forma predeterminada y la implementación se encuentra en /services/core/java/com/android/server/RescueParty.java. Rescue Party recibe información sobre eventos de arranque y fallas, y se inicia en los siguientes casos:
- El
system_serverse reinicia más de cinco veces en cinco minutos. - Una app del sistema persistente falla más de cinco veces en 30 segundos.
Cuando Grupo de rescate detecta una de estas situaciones, aumenta al siguiente nivel de rescate, procesa la tarea asociada a ese nivel y permite que el dispositivo continúe para ver si se recupera. Cada nivel es progresivamente más agresivo en lo que borra o restablece. El nivel final le solicita al usuario que restablezca la configuración de fábrica del dispositivo.
Rescue Party no requiere compatibilidad especial con el hardware. Si se implementa, el sistema de recuperación de un dispositivo debe responder al comando --prompt_and_wipe_data, y los dispositivos deben proporcionar una forma para que los usuarios confirmen cualquier destrucción de datos del usuario antes de continuar. El sistema de recuperación también debe darle al usuario la opción de intentar iniciar su dispositivo de nuevo.
Dado que cada nivel de rescate puede agregar hasta cinco minutos antes de que un dispositivo vuelva a funcionar, los fabricantes de dispositivos no deben agregar niveles de rescate personalizados. El aumento del tiempo con un dispositivo inoperable hace que los usuarios sean más propensos a iniciar una consulta de asistencia o garantía en lugar de recuperar el dispositivo por su cuenta.
Validación
Grupo de rescate suprime todos los eventos de rescate cuando el dispositivo tiene una conexión de datos por USB activa, ya que es un indicador sólido de que alguien está depurando el dispositivo.
Para anular esta supresión, ejecuta el siguiente comando:
adb shell setprop persist.sys.enable_rescue 1Desde allí, activa un bucle de fallas del sistema o de la IU:
Para activar un bucle de fallas de
system_serverde bajo nivel, ejecuta el siguiente comando:adb shell setprop debug.crash_system 1adb shell stopadb shell startPara activar un bucle de fallas de SystemUI de nivel medio, ejecuta el siguiente comando:
adb shell setprop debug.crash_sysui 1
Ambos bucles de bloqueo inician la lógica de rescate. Rescue Party también registra todas las operaciones de rescate en los registros persistentes de PackageManager almacenados en /data/system/uiderrors.txt para su posterior inspección y depuración. Los informes de errores también incluyen estos registros persistentes en la sección Mensajes de advertencia del paquete.