Por lo que puedo ver onRetainNonConfigurationInstance es una devolución de llamada redundante. Si mi actividad tiene una inicialización realmente cara, me conviene más usar onSaveInstanceState. La instancia guardada cubre más situaciones que la instancia sin configuración. ¿Hay alguna guía para usar una API vs. la otra? Gracias.¿Cuál usar: onSaveInstanceState vs. onRetainNonConfigurationInstance?
Respuesta
Por lo que puedo ver enRetainNonConfigurationInstance es una devolución de llamada redundante.
No, no lo es.
Si mi actividad tiene una inicialización realmente cara, me conviene más utilizar onSaveInstanceState.
onSaveInstanceState()
no está diseñado para una "inicialización realmente costosa". Está diseñado para "hey, el usuario realizó algunos cambios en la información de la actividad pero aún no la ha guardado, no perdamos esa información, ¿no?".
¿Hay alguna pauta para utilizar una API frente a la otra?
Si cabe en un Bundle
y no es demasiado grande, use onSaveInstanceState()
. Todo lo que no encaje en un Bundle
(por ejemplo, un socket) o es realmente grande (por ejemplo, una foto como Bitmap
) debe usar onRetainNonConfigurationInstance()
, y su aplicación debería estar en posición de volver a crear esos elementos si es necesario.
- 1. onSaveInstanceState limit?
- 2. cómo usar la variable en onSaveInstanceState
- 3. ¿Debo implementar onRetainNonConfigurationInstance?
- 4. ListFragment vs ListActivity - ¿Cuál usar?
- 5. Procmail vs. Maildrop - ¿cuál usar?
- 6. AsyncTask con rotación de pantalla - onRetainNonConfigurationInstance obsoleto
- 7. OnSaveInstanceState con Singleton
- 8. PHP vs OO PHP - ¿Cuál usar?
- 9. SpinWait vs espera en espera. ¿Cuál usar?
- 10. Buffered vs no buffer, ¿cuál usar?
- 11. NullPointerException en onSaveInstanceState con AndroidFragments
- 12. Fragment's onSaveInstanceState() nunca se llama
- 13. Separar un Fragmento que no desencadena onSaveInstanceState()
- 14. AWS DynamoDB VS Couchdb, ¿cuál sería mejor usar cuando?
- 15. BNF vs EBNF vs ABNF: ¿cuál elegir?
- 16. ¿Dónde se guarda el paquete de onSaveInstanceState?
- 17. Cuándo usar Ruby vs Cuándo usar PHP
- 18. ¿Cuál es la diferencia entre() vs [] vs {}?
- 19. Cuándo usar node.js vs sinatra vs rails?
- 20. ¿Cuándo usar Literal vs LiteralControl?
- 21. Python - Cuándo usar el archivo vs abrir
- 22. ¿Cuándo deberíamos usar Mockery vs JUnit4Mockery?
- 23. enum o define, ¿cuál debo usar?
- 24. Persistente vs no persistente - ¿Qué debería usar?
- 25. ¿Cuándo debería usar make_heap vs. Priority Queue?
- 26. Cuándo usar SQLITE_TRANSIENT vs SQLITE_STATIC?
- 27. Cuándo usar strtr vs str_replace?
- 28. Cuando usar CouchDB vs RDBMS
- 29. cuándo usar Set vs. Collection?
- 30. EQU vs DC.B. ¿Cuál es la diferencia?
@Raj: No, no lo haría. Los dos métodos sirven diferentes roles. 'onSaveInstanceState()' pasa a usarse en cambios de configuración. También sucede que se usa en casos donde Android quiere finalizar el proceso de la aplicación para liberar RAM, pero el usuario puede volver a la actividad (por ejemplo, a través del botón ATRÁS). Esta es la razón por la que Android usa un 'Bundle': se puede convertir en un' byte [] 'y enviar a través de los límites del proceso. Android se queda con el 'byte []' hasta el momento en que sea necesario o hasta que la actividad ya no se pueda acceder a través de BACK. – CommonsWare
@Raj: Sin embargo, dado que un 'Bundle' (o lo que sea' onSaveInstanceState() ') debe transportarse a través de los límites del proceso, aún nos faltan maneras de manejar cosas que queremos conservar para un cambio de configuración pero que no pueden entrar en un 'Bundle', como un socket. Para eso, hay 'onRetainNonConfigurationInstance()', que solo se usa en los casos en que el proceso * no * se terminará, y así podemos pasar objetos arbitrarios de instancia de actividad nueva a nueva. – CommonsWare
Mi opinión es que onSaveInstanceState() permite guardar datos serializables simples en el almacenamiento persistente a largo plazo. Estos datos se pueden recuperar más adelante, incluso después de que se hayan eliminado los procesos de la aplicación. Por el contrario, onRetainNonConfigurationInstance() le permite guardar cualquier objeto Java con la suposición de que estos objetos serán reutilizados inmediatamente por una nueva instancia de actividad. Por lo tanto, se pueden guardar elementos como AsyncTask y SQLiteDatabse. La clave aquí es crear estos objetos usando la aplicación y no el contexto de la actividad. De lo contrario, la actividad destruida puede no ser recolectada como basura. – Raj