Soweit ich onRetainNonConfigurationInstance sehe, ist ein redundanter Rückruf. Wenn meine Aktivität eine sehr teure Initialisierung hat, ist es besser, onSaveInstanceState zu verwenden. Gespeicherte Instanz umfasst mehr Situationen als Nicht-Konfigurationsinstanz. Gibt es eine Richtlinie für die Verwendung einer API gegenüber der anderen? Vielen Dank.Welcher zu verwenden: onSaveInstanceState vs onRetainNonConfigurationInstance?
Antwort
Soweit ich onRetainNonConfigurationInstance sehen kann, ist ein redundanter Rückruf.
Nein, ist es nicht.
Wenn meine Aktivität wirklich teuer Initialisierung hat, bin ich besser mit onSaveInstanceState.
onSaveInstanceState()
ist nicht für "wirklich teure Initialisierung" ausgelegt. Es wurde für "Hey, der Benutzer hat einige Änderungen an den Informationen in der Aktivität gemacht, aber hat es noch nicht gespeichert, lass uns diese Daten nicht verlieren, m'kay?".
Gibt es eine Richtlinie für die Verwendung einer API gegenüber der anderen?
Wenn es in eine Bundle
passt und nicht zu groß ist, verwenden Sie onSaveInstanceState()
. Alles, was nicht in eine Bundle
(z. B. eine Buchse) passt oder wirklich groß ist (z. B. ein Foto als Bitmap
), sollte onRetainNonConfigurationInstance()
verwenden, und Ihre Anwendung sollte in der Lage sein, diese Elemente bei Bedarf neu zu erstellen.
- 1. shared_ptr vs. neuer Operator: welcher zu verwenden
- 2. wie onRetainNonConfigurationInstance implementieren
- 3. Welcher .Net Timer() zu verwenden
- 4. Verwenden von OnSaveInstanceState mit Fragmenten im Backstack?
- 5. CA1500 vs. SA1309 - Welcher gewinnt?
- 6. onSaveInstanceState und finish()
- 7. Daten speichern (OnSaveInstanceState)
- 8. Welcher zu verwenden, AngularUI Bootstrap oder AngularStrap?
- 9. Welcher Blockchiffriermodus ist zu verwenden? CFB angemessen?
- 10. Android: onRetainNonConfigurationInstance wird nicht aufgerufen Bildschirmausrichtung ändern
- 11. onSaveInstanceState funktioniert nicht
- 12. onSaveInstanceState funktioniert nicht
- 13. ActivityNotFoundException onBackPressed und onSaveInstanceState
- 14. onSaveInstanceState funktioniert nicht
- 15. android - Daten in onPause, onStop oder onSaveInstanceState
- 16. Welcher Unterschied zwischen Jersey vs JAX-RS-
- 17. Welcher Benutzer mit Bereitstellungsschlüsseln verwenden?
- 18. Hive - Jdbc vs Thrift-Client - welche zu verwenden?
- 19. FragmentActivity onSaveInstanceState nicht immer genannt
- 20. Unit Test onSaveInstanceState mit ActivityRules
- 21. Save-Schnittstelle (Listener) in onSaveInstanceState
- 22. Android View onSaveInstanceState nicht aufgerufen
- 23. Wann node.js vs sinatra vs Schienen zu verwenden?
- 24. Welcher zu verwenden mit Tabhost: FragmentActivity oder TabActivity?
- 25. Welcher einfache zukunftssichere serielle Delphi-Comms-Code zu verwenden?
- 26. RxJava und Sqlbrite - welcher Operator zu verwenden ist
- 27. Welcher Typ ist sinnvoller für Dokumentennummern zu verwenden?
- 28. Welcher Rahmen für eine Java Web App zu verwenden ist
- 29. Button vs div - was zu verwenden?
- 30. PHP vs OO PHP - Welche zu verwenden?
@Raj: Nein, würde es nicht. Die beiden Methoden dienen unterschiedlichen Rollen. 'onSaveInstanceState()' wird in Konfigurationsänderungen verwendet. Es wird auch in Fällen verwendet, in denen Android den Prozess der Anwendung zum Freigeben von RAM beenden möchte, der Benutzer jedoch immer noch zu der Aktivität zurückkehren kann (z. B. über die Schaltfläche ZURÜCK). Aus diesem Grund verwendet Android ein 'Bundle' - es kann in ein' byte [] 'umgewandelt und über Prozessgrenzen hinweg versendet werden. Android hält das 'byte []' so lange fest, bis es benötigt wird oder bis die Aktivität nicht mehr über BACK erreichbar ist. – CommonsWare
@Raj: Da jedoch ein 'Bundle' (oder was auch immer' onSaveInstanceState() 'verwenden würde) über Prozessgrenzen hinweg transportiert werden muss, gibt es immer noch keine Möglichkeiten, mit Dingen umzugehen, die wir für eine Konfigurationsänderung behalten wollen, aber nicht selbst gehe in ein 'Bündel', wie eine Steckdose. Dafür gibt es 'onRetainNonConfigurationInstance()', das nur in Fällen verwendet wird, in denen der Prozess * nicht * beendet wird, und so können wir beliebige Objekte von der alten zur neuen Aktivitätsinstanz übergeben. – CommonsWare
Mein Take ist, OnSaveInstanceState() ermöglicht das Speichern von einfach serialisierbaren Daten in Langzeit-Speicher. Diese Daten können zu einem späteren Zeitpunkt abgerufen werden, auch nachdem die Anwendungsprozesse beendet wurden. Im Gegensatz dazu können Sie mit onRetainNonConfigurationInstance() jedes Java-Objekt mit der Annahme speichern, dass diese Objekte sofort von einer neuen Aktivitätsinstanz wiederverwendet werden. Daher können Elemente wie AsyncTask und SQLiteDatabase gespeichert werden. Der Schlüssel besteht darin, diese Objekte über den Kontext der Anwendung und nicht über die Aktivität zu erstellen. Andernfalls kann die zerstörte Aktivität möglicherweise nicht als Müll gesammelt werden. – Raj