====== Estats d'interfície d'Android ====== Els estats d'interfície d'[[Android]] son importants en tant que les ''Activity'' i les ''View'' es destrueixen i es recreen de forma automàtica per part del sistema operatiu en diverses circumstàncies com: {{ :android:landscape_mode.jpg?200}} * Canvi d'aplicació. * Escassedat de memòria RAM. * Canvi de tamany de la interfície. * Rotació del dispositiu: canvi entre //portrait// i //landscape//. * Modificació dels //settings// del dispositiu. * etc. La destrucció i recreació dels objectes es descriu en el [[https://developer.android.com/guide/components/activities/activity-lifecycle?hl=es-419|cicle de vida o lifecycle de les Activitats]]. La informació de la UI és volàtil i es perd o reinicia en la recreació, el què pot suposar una destrucció de les dades temporals que hi ha contingudes, per exemple, un missatge a mig redactar en una aplicació de missatgeria quan es rota el dispositiu. Per solventar aquest problema es disposa de diversos [[https://developer.android.com/topic/libraries/architecture/saving-states#options|mecanismes per guardar i recuperar l'estat de la UI]]: * **Guardar les dades en l'emmagatzematge**: més aparatós i lent, però el més segur, ja que sempre funcionarà, encara que obrim l'aplicació després de molt de temps o després de reinicis del sistema. * **Guardar les dades en InstanceState**: es guarda en objectes en RAM que ens simplifiquen la feina. * **ViewModels**: mecanisme més sofisticat que separa la capa de negoci del manteniment de les dades, en una extensió del patró MVC al MVVM (Model-View-ViewModel). {{tag> #Dam #DamMp08 #DamMp08Uf2 #DamMp08Uf02 Android mobile java kotlin }} \\ ===== InstanceState ===== Es poden guardar variables primitives o objectes simples com ''Strings'' en l'objecte de tipus''Bundle'' (i que acostuma a dir-se ''savedInstanceState'') que ens proporciona el propi Android //framework//. Revisa [[https://developer.android.com/guide/components/activities/activity-lifecycle?hl=es-419#save-simple,-lightweight-ui-state-using-onsaveinstancestate|com enregistrar i recuperar dades de la UI]] en la documentació oficial del cicle de vida d'Android. Una [[https://developer.android.com/guide/components/activities/activity-lifecycle#oncreate|implementació resumida]] en la mateixa documentació. Bàsicament es tracta de tenir-ho en compte als mètodes derivats d'''Activity'': * **''onSaveInstanceState(Bundle)''**: una nova //callback// que ens permetrà guardar les dades de la UI en un objecte ''Bundle''. * **''onCreate(Bundle)''**: quan recreem l'''Activity'' cal tenir-ho en compte per recuperar les dades. * **''onRestoreInstanceState(Bundle)''**: enlloc de recuperar les dades al ''onCreate'', es pot fer en aquest altre mètode que es crida després de ''onCreate'' i ''onStart''. \\ ===== ViewModels ===== Revisa l'article [[Android Fragments]] per exercitar aquest mode. \\