android - studio - method fragment




Perché usare Fragment#setRetainInstance(booleano)? (2)

Trovo Fragment # setRetainInstance (true) confusionario. Ecco Javadoc, estratto dall'API per sviluppatori Android :

public void setRetainInstance (boolean retain )

Controlla se l'istanza di un frammento viene mantenuta attraverso la ricreazione di attività (ad esempio da una modifica alla configurazione). Questo può essere usato solo con frammenti non nello stack posteriore. Se impostato, il ciclo di vita del frammento sarà leggermente diverso quando viene ricreata un'attività:

  • onDestroy () non verrà chiamato (ma onDetach () lo sarà ancora, perché il frammento viene staccato dalla sua attività corrente).
  • onCreate (Bundle) non verrà chiamato poiché il frammento non viene ricreato.
  • onAttach (Activity) e onActivityCreated (Bundle) saranno ancora chiamati.

Domanda: Come lo usi come sviluppatore e perché rende le cose più semplici?


Come si usa questo come sviluppatore

Chiama setRetainInstance(true) . In genere lo faccio in onCreateView() o onActivityCreated() , dove lo uso.

e perché rende le cose più facili?

Tende ad essere più semplice di onRetainNonConfigurationInstance() per gestire la conservazione dei dati attraverso le modifiche alla configurazione (ad esempio, ruotando il dispositivo da verticale a orizzontale). I frammenti non conservati vengono distrutti e ricreati nella modifica della configurazione; i frammenti conservati non lo sono. Pertanto, tutti i dati conservati da tali frammenti conservati sono disponibili per l'attività di modifica post-configurazione.


È molto utile per mantenere aperte le risorse a lungo termine come i socket. Avere un frammento senza UI che contiene riferimenti agli zoccoli bluetooth e non dovrai preoccuparti di ricollegarli quando l'utente gira il telefono.

È anche utile per mantenere i riferimenti alle risorse che impiegano molto tempo a caricarsi come bitmap o dati del server. Caricalo una volta, conservalo in un frammento trattenuto e quando l'attività viene ricaricata è ancora lì e non devi ricostruirla.





android-lifecycle