onCreate () wird beim erneuten Öffnen der letzten Aufgabe aufgerufen, nachdem die Berechtigungseinstellungen geändert wurden

9

Der Fragetitel klingt vielleicht kompliziert, aber hier ist meine Situation.

Ich habe ein Kartenfragment innerhalb einer Aktivität. Einfach. Aktivieren der Speicherberechtigung, um die Anzeige von Map zuzulassen, funktioniert einwandfrei. Hintergründe der App durch Drücken der Home-Taste, dann deaktivieren Sie die Speicherberechtigung und öffnen Sie die App von der letzten Aufgabe, App stürzt ab.

Das Problem besteht darin, onResume () der Host-Aktivität aufzurufen, onCreate () wird sowohl auf der Host-Aktivität als auch auf onCreateView () des Map-Fragments aufgerufen. So wirft es Ausnahmen.

Es scheint, als ob der App-Prozess beendet wird, wenn die Berechtigung geändert wird und somit die Aktivität neu erstellt wird.

%Vor%

Von super.onStart () von der Aktivität

    
WenChao 24.09.2015, 00:46
quelle

3 Antworten

0

Die praktikable Lösung besteht nun darin, getSupportFragmentManager().popBackStackImmediate(); in onCreate () der Aktivität aufzurufen, um zu verhindern, dass das Kartenfragment neu erstellt werden muss.

popBackStack () wird in diesem Fall nicht funktionieren, da es asynchron ist.

    
WenChao 25.09.2015, 06:48
quelle
0

Wahrscheinlich ein bisschen spät, könnte immer noch anderen in der Zukunft helfen:)

Sie sollten überprüfen, ob savedInstanceState ist null , die an onCreate(Bundle savedInstanceState) übergeben wird. Wenn es nur null ist, dann lade Fragment like so:

%Vor%     
Sazid 30.10.2015 16:56
quelle
0

Ich hatte ähnliche Probleme mit der dynamischen Änderung der App-Berechtigung. Nach etwas Ausgrabung, was ich verstanden habe, könnte auch hilfreich für Sie sein.

Das Ändern der Berechtigung führt zu einer Beendigung Ihrer Anwendung durch das System. Wenn Sie nun Ihre Anwendung über den Übersichtsbildschirm öffnen, wird die Anwendung neu gestartet. Dies ist der Hauptgrund für Ihren Absturz, da Sie möglicherweise eine Operation für das Fragmentobjekt ausführen ist jetzt null.

Hier ist ein wichtiger Punkt zu beachten, dass vor dem Abbruch ein Fragmentstatus im sourcedinstance-Objekt gespeichert wird.

Um den Absturz zu stoppen, sollten Sie die Fragment-Instanz mit dieser Codezeile aufrufen -

%Vor%

Hier ist "MAP FRAG" ein Tag, den Sie Ihrem Fragment geben müssen.

teilen Sie, wenn Sie irgendwelche Verwirrung haben.

    
nikhil bansal 21.03.2017 09:22
quelle