Salvare e ripristinare lo stato dell’istanza reso facile!

Come principiante che crea app semplici, potresti notare durante il test che la rotazione dello schermo ripristina tutti i dati raccolti dall’utente. La rotazione dello schermo è uno dei tanti cambiamenti del ciclo di vita in Android che può distruggere e ricreare l’attività e causare la perdita di tutti i dati! Non una grande esperienza utente.

Per preparare l’app a queste modifiche al ciclo di vita dell’attività, sono disponibili due metodi che è possibile aggiungere a MainActivity per salvare e ripristinare i dati:

  1. onSaveInstanceState ()
  2. onRestoreInstanceState()

Il metodo onSaveInstanceState () consente di aggiungere coppie chiave/valore all’outState dell’app. Quindi il metodo onRestoreInstanceState () ti consentirà di recuperare il valore e impostarlo nuovamente sulla variabile da cui è stato originariamente raccolto.

Per preparare l’app a utilizzarli, è importante creare variabili di istanza per tutti i dati che dovranno essere conservati quando lo stato dell’app causa la distruzione dell’Attività. Queste variabili sono al di fuori di qualsiasi metodo e accessibili da qualsiasi punto della classe.

Si vuole anche per identificare il punto di vista che visualizzano i dati dell’utente e indicare che si desidera che i dati continuano ad essere visualizzati qui, quando l’Attività viene ripristinato con l’attributo:

android:freezesText="true"

onSaveInstanceState():

Questo metodo viene chiamato prima di onStop() nelle vecchie versioni di Android e può essere chiamato dopo onStop() per le versioni più recenti.

 1 @Override
2 protected void onSaveInstanceState(Bundle outState) {
3 super.onSaveInstanceState(outState);
4 outState.putInt("AStringKey", variableData);
5 outState.putString("AStringKey2", variableData2);
6 }

Consente di suddividere questo metodo:

  1. L’override sulla prima riga indica che si intende sovrascrivere la dichiarazione predefinita del metodo.
  2. La firma del metodo sulla riga due inizia con il modificatore di accesso “protetto”, questo indica che è possibile accedere al metodo solo all’interno della classe stessa, del pacchetto o di una sottoclasse. Il tipo restituito per questo metodo è “void” in quanto non restituirà alcun dato. Il parametro utilizzato da questo metodo è un oggetto di tipo Bundle denominato outState.
  3. Poiché stiamo sovrascrivendo questo metodo predefinito, dobbiamo usare super (sulla riga tre) per memorizzare tutti i dati outState predefiniti.
  4. Sulla linea quattro, è possibile iniziare a memorizzare i propri dati. onSavedInstanceState () viene chiamato usando la notazione dot sull’outState dell’app. Il primo argomento è qualsiasi stringa e viene utilizzato come chiave (simile all’impostazione di una variabile) per accedere al valore memorizzato nel secondo argomento. Qui abbiamo fornito una variabile di istanza che sta memorizzando un valore intero. Nota la riga cinque è molto simile con l’eccezione che una variabile del tipo String viene salvata nell’outState.

onRestoreInstanceState():

Questo metodo viene chiamato dopo onStart().

 1 @Override
2 protected void onRestoreInstanceState(Bundle savedInstanceState){
3 super.onRestoreInstanceState(savedInstanceState);
4 variableData = savedInstanceState.getInt("AStringKey");
5 variableData2 = savedInstanceState.getString("AStringKey2");
6 }

Consente di suddividere questo metodo:

  1. L’override sulla prima riga indica che si intende sovrascrivere la dichiarazione predefinita del metodo.
  2. La firma del metodo sulla riga due inizia con il modificatore di accesso “protetto” indica che è possibile accedere al metodo solo all’interno della classe stessa, del pacchetto o di una sottoclasse. Il tipo restituito per questo metodo è “void” in quanto non restituirà alcun dato. Il parametro utilizzato da questo metodo è un oggetto di tipo Bundle denominato savedInstanceState.
  3. Poiché stiamo sovrascrivendo questo metodo predefinito, dobbiamo usare super, sulla linea tre, per ripristinare tutti i dati savedInstanceState predefiniti.
  4. Poiché sono stati memorizzati i dati dell’app rilevanti nelle variabili di istanza, è possibile impostare i dati salvati in outState alla variabile richiamando un metodo get su savedInstanceState utilizzando la notazione dot e fornire la chiave String utilizzata per memorizzare i dati come argomento.

Spero che questa spiegazione ti aiuti a capire meglio questi metodi e come usarli. Per ulteriori informazioni visitare la documentazione di attività per Android.

Codifica felice!