Muitos usuários dependem muito do smartphone e precisam de um dispositivo que funcione. tempo de resposta. No entanto, às vezes os dispositivos acabam em loops de reinicialização, o que faz com que os usuários abrir tíquetes de suporte ou consultas de garantia. Esse processo é frustrante para e caros para fabricantes e operadoras de dispositivos.
O Android 8.0 inclui um recurso que envia um "grupo de resgate" quando percebe componentes essenciais do sistema travados em loops de falha. O grupo de resgate passa por uma série de ações para recuperar o dispositivo. Como último recurso, o grupo de resgate reinicializa o dispositivo no modo de recuperação e solicita que o usuário execute uma ação de fábrica redefinido.
Esses recursos de recuperação não são exigidos pelo Android Documento de definição de compatibilidade, mas ainda pode ser útil para reduzir casos de suporte.
Implementação
O grupo de resgate é ativado por padrão no Android 8.0, e a implementação reside
/services/core/java/com/android/server/RescueParty.java
:
O grupo de resgate recebe informações sobre eventos de inicialização e falha e é iniciado se:
- O system_server é reiniciado mais de 5 vezes em 5 minutos.
- Um app do sistema persistente falha mais de 5 vezes em 30 segundos.
Quando uma dessas situações é detectada, o grupo de resgate encaminha para a próxima de recuperação, processa a tarefa associada ao nível e permite que o dispositivo e verifique se ele se recupera. Cada nível é progressivamente mais agressivo o que ele limpa ou redefine. No nível final, é solicitado que o usuário redefina o dispositivo para a configuração original. dispositivo.
Nenhum suporte de hardware especial é necessário para dar suporte ao grupo de resgate. Se implementada,
o sistema de recuperação de um dispositivo precisa responder
O comando --prompt_and_wipe_data
e os dispositivos precisam
apresentar aos usuários uma maneira de confirmar a destruição dos dados antes
continuar. O sistema de recuperação também deve dar ao usuário a opção de
ao tentar inicializar o dispositivo novamente.
Porque cada nível de resgate pode levar até cinco minutos para o dispositivo estar operacional os fabricantes de dispositivos não devem adicionar níveis de resgate personalizados. Mais tempo com um dispositivo inoperável aumenta a probabilidade de os usuários iniciarem um suporte ou uma consulta de garantia em vez de recuperar o dispositivo.
Validação
Todos os eventos de resgate serão suprimidos quando o dispositivo tiver dados USB ativos. porque isso é um forte sinal de que alguém está depurando o dispositivo.
Para substituir essa supressão, execute:
adb shell setprop persist.sys.enable_rescue 1
A partir daí, é possível acionar um loop de falha do sistema ou da interface.
Para acionar um loop de falha system_server
de baixo nível, execute:
adb shell setprop debug.crash_system 1
Para acionar um loop de falha do SystemUI de nível médio, execute:
adb shell setprop debug.crash_sysui 1
Ambos os loops de falha iniciam a lógica de resgate. Todas as operações de resgate também são
registrados para os registros persistentes do PackageManager armazenados em
/data/system/uiderrors.txt
para inspeção e depuração posteriores.
Esses registros persistentes também são incluídos em todos os relatórios de bugs na seção
mensagens de aviso" nesta seção.