Ich habe einige Fragmente in einem ViewPager
geladen, wo jede "Seite" aus einer Zeile in einem Cursor geladen wird. Jedes Fragment zeigt ein Bild (JPEG) auf dem Gerät. Wenn der Benutzer das Fragment ablehnt (d. H. Swipe/Seitenwechsel, Hits back/up oder einfach die App ganz schließt), möchte ich eine Methode aufrufen, die die JPEG-Datei zum Schreiben öffnet und eine Aktualisierung ihrer Metadaten vornimmt. Die eigentliche Arbeit wird schließlich von der Apache Commons Imaging-Bibliothek übernommen.Funktioniert Fragment onStop auf UI-Thread
Ich habe dies implementiert, indem ich meine saveToFile()
Methode aus jedem Lebenszyklus des Fragments onStop()
Handler aufgerufen. Bedeutet dies, dass die gesamte Dateioperation auf dem UI-Thread ausgeführt wird? Sollte ich dafür unbedingt eine AsyncTask
einrichten?
Sagen Sie die Datei schreiben aus irgendeinem Grund plötzlich (für einige JPEG) sollte eine lange Zeit dauern, zB 2 Minuten. Was würde dann passieren? Würde die UI auf diese Seite/dieses Fragment warten (einfrieren), bevor sie fortgesetzt wird? Oder würde der Prozess (in Datei schreiben) irgendwie "im Hintergrund" weiterlaufen? Oder würde der Prozess einfach umgebracht, kurzzeitig gestoppt?
Die Art, wie ich dies derzeit verdrahtet habe (onStop
Aufruf saveToFile()
, die die Bildgebungsbibliothek aufruft und dann die Datei aktualisiert) scheint zu funktionieren, wie es sollte. Selbst wenn ich die App beende, sehe ich immer noch meinen Toast-Text, der sagt: "In Datei schreiben ..." Scheinbar ist der Prozess nie gestört, und ich kann nicht sagen, dass ich irgendeine UI-Verzögerung erhalte.
Ja, alle Lifecycle-Methoden von Activity & Fragment werden im Hauptthread ausgeführt (auch als UI-Thread bezeichnet). Sie können dies durch die Tatsache bestätigen, dass Sie mit Views in diesen Methoden spielen können. – Sufian