IllegalStateException - Fragmentunterstützungsbibliothek
Ich habe ein ernstes problem mit meiner App ständig abstürzt, auf einige Nutzer von Geräten mit der folgenden Ausnahme in einer Aktivität onStart-Methode:
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1299)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525)
at android.support.v4.app.DialogFragment.show(DialogFragment.java:123)
Kann ich nicht reproduzieren diesen Fehler lokal in meinem emulator. Ich habe ein paar Fragen bezüglich dieser Frage auf stackoverflow:
hier und
hier
Habe ich versucht die vorgeschlagene Lösung, D. H. nicht in die leere Bündel in onSaveInstance weder Fragmente noch Aktivitäten.
Aber das problem bleibt. Dies ist der einzige Crash-Bericht, den ich jemals bekommen, und ich bekomme es ständig.
Hat jemand eine funktionierende Lösung?
InformationsquelleAutor der Frage phlebas | 2012-08-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das gelöst, indem
ich.e.. Fügen Sie eine nicht-ui-fragment in onResumeFragments und aufrufen von weiteren Transaktionen in den Listener-Callback.
Überprüfen Sie meine Antwort hier für code: "Kann nicht führen Sie diese Aktion nach onSaveInstanceState" - warum bin ich immer diese Ausnahme von meiner Tätigkeit der onResume-Methode?
Bekam keine mehr IllegalStateException so weit.
InformationsquelleAutor der Antwort phlebas
Ich löste dies mit diese Problemumgehungnämlich den code in eine Methoden
onPostResume()
Funktion in der AktivitätInformationsquelleAutor der Antwort PearsonArtPhoto
Lesen Sie Diesen Artikel.
Und
Diese.
Einmal das Problem verstanden haben, gehen Sie vor und ändern Sie die Dinge richtig:
Herauszufinden, warum Ihre Transaktionen geschehen außerhalb Ihres onResume Zustand. Warum sind diese Dinge geschehen, wenn Sie nicht sein sollte. Warum sind Sie manuell hinzufügen und entfernen von Fragmenten mit Bezug auf den Lebenszyklus von Sie die app statt, wenn der Benutzer anfordert. Sollten Sie vielleicht brauchen, eine Zeit, in der onCreate () - oder wenn der Benutzer ruft etwas. Aber warum sind Sie Unordnung mit Ihnen in onResume() in Erster Linie? Tun Sie das nicht.
Wenn Sie ändern Sie alle
.commit()
zu.commitAllowStateLoss()
dann die Abstürze Weg gehen wird. Aber, Sie ist besser, dies nicht zu tun. Sie sind besser dran, machen Sie sicher, dass Sie nie ändern Ihre Fragmente, außer, wenn die app ist voll Leben. Das bedeutet manchmal, nie be-ein fragment aus der OnActivityResult (), sondern eher schwächelnde laufen in Ihrem onPostResume(), und die Vermeidung Durchführung von änderungen an der Benutzeroberfläche in asynchronen threads, die fälschlicherweise davon ausgehen, Sie konnte Sie nicht umgebracht haben, die Tätigkeit in der Zwischenzeit.Wenn Sie wollen einfach nur Spachtelmasse alles
.commitAllowStateLoss()
wird das tun. Wenn Sie möchten, um es richtig zu machen, stellen Sie sicher, dass Sie nicht Geige mit Ihren Fragmenten nach sterben die Dinge.Einer der neueren Formen von Android circa Oreo ich denke, änderte sich dies zu vermeiden, dieses lästige Fehler. Meine Antwort scheint ein wenig vage, aber es ist, weil der Fehler in das Paradigma. Du allein treffen kann, mit verschiedenen code-Elemente und ist ziemlich routinemäßig.
InformationsquelleAutor der Antwort Tatarize