2013-05-25 1 views
32

Ich verwendete die Commit-Methode in meinem Projekt, die es mit Fragmenten baute.Was ist der Unterschied zwischen commit() und commitAllowingStateLoss() in den Fragmenten

Wie auch immer, manchmal bekam ich IllegalStateException: Can not perform this action after onSaveInstanceState Fehler und ich konnte keine gute Lösung darüber finden, aber nur diese Methode commitAllowingStateLoss(). Ich habe die Commit-Funktion auf commitAllowingStateLoss() geändert, habe sie aber nicht lange benutzt, um zu testen. Kann mir diese Funktion helfen? Und die Hauptfrage, was ist der Unterschied zwischen commit() und commitAllowingStateLoss()?

Antwort

72

Es gibt nur einen Unterschied zwischen commit() und commitAllowingStateLoss(): Letzteres löst keine Ausnahme aus, wenn ein Zustandsverlust auftritt. Ansonsten haben sie ein identisches Verhalten.

Weitere Informationen finden Sie unter blog post zu diesem Thema.

+1

Der Unterschied ist subtiler als das. 'commit()' kann ein Ausnahmeereignis auslösen, wenn kein Statusverlust auftreten würde. Zum Beispiel gibt 'commit()' immer eine Exception aus, wenn sie von 'LoaderCallbacks.onLoadFinished()' aufgerufen wird, selbst in Fällen, in denen 'commitAllowingStateLoss()' Transaktionen ohne Statusverlust speichert. Natürlich kann _sometimes_ state bei der Verarbeitung von 'onLoadFinished()' nicht gespeichert werden. –

Verwandte Themen