Sobes.tech
Middle

Qual è la specificità del cambio di posizioni sulla piattaforma Android?

sobes.tech AI

Risposta dell'AI

Quando si cambiano le posizioni (rotazione dello schermo o altri cambiamenti di configurazione) su Android, l'Activity corrente viene distrutta e ne viene creata una nuova.

Cosa succede:

  • Vengono chiamati i cicli di vita della vecchia Activity: onPause(), onStop(), onDestroy().
  • La vecchia Activity viene rimossa dalla memoria.
  • Viene creata una nuova Activity.
  • Vengono chiamati i cicli di vita della nuova Activity: onCreate(), onStart(), onResume().

Specificità per QA:

  • Perdita di dati: Dati non salvati nei campi di input, elementi selezionati nelle liste, ecc., possono andare persi se non si implementa la loro conservazione.
  • Stato dell'UI: La visibilità degli elementi, la posizione dello scroll, le schede selezionate e altri stati dell'UI possono essere reimpostati ai valori di default.
  • Operazioni in background: Le attività in background in esecuzione (come il caricamento dei dati) possono essere interrotte o terminare in modo errato.
  • Prestazioni: Múltiple cambi di configurazione possono rallentare l'app a causa della continua ricreazione dell'Activity.
  • Perdite di memoria: Gestione scorretta delle risorse (ad esempio, Listener non disiscritti in onDestroy()) può portare a perdite di memoria.

Come viene gestito dagli sviluppatori (e cosa QA deve verificare prima):

  • Salvataggio dello stato: Uso di onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).
    // Esempio di salvataggio dei dati in onSaveInstanceState()
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // Esempio di ripristino dei dati in onCreate()
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        if (savedInstanceState != null) {
            String savedText = savedInstanceState.getString("saved_text");
            if (savedText != null) {
                myEditText.setText(savedText);
            }
        }
    }
    
  • Gestione dei cambi di configurazione: Dichiarazione di android:configChanges nel AndroidManifest.xml per quei casi in cui non è necessario ricreare l'Activity (scenari meno comuni per il cambio di orientamento, ma usati per altri cambiamenti di configurazione).
  • Ciclo di vita del ViewModel: Il ViewModel mantiene il suo stato durante i cambi di configurazione e non viene distrutto insieme all'Activity.
  • Fragment: Gestione corretta del ciclo di vita dei Fragment.

Test specifici per il cambio di posizione:

  • Simulazione di rotazioni su diversi dispositivi e emulatori.
  • Test di salvataggio e ripristino dei dati dopo il cambio di posizione.
  • Verifica dello stato dell'UI (visibilità, testo, scroll, elementi selezionati).
  • Test di interruzione e ripresa delle attività in background.
  • Verifica di perdite di memoria (uso di Android Profiler).
  • Test di stress: cambi di posizione rapidi e ripetuti.

Strumenti per QA:

  • Android Studio (per il debug, visualizzazione dei log, uso di Profiler).
  • comandi adb per simulare rotazioni.
  • diversi emulatori e dispositivi reali con risoluzioni e versioni di Android diverse.