Festa di salvataggio

Molti utenti dipendono fortemente dal proprio telefono e necessitano di un dispositivo sempre funzionante. Tuttavia, a volte i dispositivi finiscono in cicli di riavvio, che inducono gli utenti a inviare ticket di supporto o richieste di garanzia. Questo processo è frustrante per gli utenti e costoso per i produttori e gli operatori di dispositivi.

Android 8.0 include una funzionalità che invia una "squadra di soccorso" quando nota che i componenti principali del sistema sono bloccati in loop di crash. La squadra di soccorso procede quindi con una serie di azioni per recuperare il dispositivo. Come ultima risorsa, Rescue Party riavvia il dispositivo in modalità di ripristino e richiede all'utente di eseguire un ripristino delle impostazioni di fabbrica.

Queste funzionalità di salvataggio non sono richieste dal documento di definizione della compatibilità Android , ma potrebbero comunque essere utili per ridurre i casi di supporto.

Implementazione

Rescue Party è abilitato per impostazione predefinita in Android 8.0 e l'implementazione si trova in /services/core/java/com/android/server/RescueParty.java . Rescue Party riceve informazioni sugli eventi di avvio e arresto anomalo e si avvia se:

  • Il system_server si riavvia più di 5 volte in 5 minuti.
  • Un'app di sistema persistente si arresta in modo anomalo più di 5 volte in 30 secondi.

Quando viene rilevata una di queste situazioni, Rescue Party passa al livello di soccorso successivo, elabora l'attività associata a quel livello e lascia che il dispositivo proceda per verificare se viene ripristinato. Ogni livello è progressivamente più aggressivo in ciò che cancella o ripristina. Il livello finale richiede all'utente di ripristinare le impostazioni di fabbrica del dispositivo.

Non è richiesto alcun supporto hardware speciale per supportare Rescue Party. Se implementato, il sistema di ripristino di un dispositivo deve rispondere al comando --prompt_and_wipe_data e i dispositivi devono fornire agli utenti un modo per confermare l'eventuale distruzione dei dati utente prima di procedere. Il sistema di ripristino dovrebbe inoltre offrire all'utente la possibilità di tentare di avviare nuovamente il proprio dispositivo.

Poiché ciascun livello di soccorso può richiedere fino a 5 minuti prima che un dispositivo sia nuovamente utilizzabile, i produttori di dispositivi non dovrebbero aggiungere livelli di soccorso personalizzati. L'aumento del tempo trascorso con un dispositivo non utilizzabile aumenta le probabilità che gli utenti avviino una richiesta di supporto o di garanzia invece di ripristinare autonomamente il proprio dispositivo.

Validazione

Tutti gli eventi di salvataggio vengono soppressi quando il dispositivo ha una connessione dati USB attiva perché è un segnale forte che qualcuno sta eseguendo il debug del dispositivo.

Per ignorare questa soppressione, eseguire:

adb shell setprop persist.sys.enable_rescue 1

Da lì, puoi attivare un ciclo di arresto anomalo del sistema o dell'interfaccia utente.

Per attivare un ciclo di crash system_server di basso livello, eseguire:

adb shell setprop debug.crash_system 1

Per attivare un ciclo di crash SystemUI di medio livello, esegui:

adb shell setprop debug.crash_sysui 1

Entrambi i cicli di crash avviano la logica di salvataggio. Tutte le operazioni di salvataggio vengono inoltre registrate nei log persistenti di PackageManager archiviati in /data/system/uiderrors.txt per successive ispezioni e debug. Questi log persistenti sono inclusi anche in ogni segnalazione di bug nella sezione "Messaggi di avviso del pacchetto".