Kamera überschreibt altes Bild nicht, wenn sich die Ausrichtung ändert

8

Ich habe einen RecyclerView-Adapter mit vielen verschiedenen ViewHoldern. Einer der ViewHolder enthält ein ImageView, das in der Lage sein muss, ein Bild aufzunehmen, seine Größe zu ändern und es dann anzuzeigen. Für die Modularität möchte ich, dass der ViewHolder in sich geschlossen ist: Er und nicht die Elternaktivität sollte alles behandeln, was den Fotoaufnahme- und -anzeigeprozess betrifft. Auch der Dateipfad ist konstant (wird sich nie ändern). Tatsächlich ist es /storage/emulated/0/com.company.app/myst/cat.jpg . Als Ergebnis hier ist meine Implementierung der ImageView onClick -Methode.

%Vor%

Wenn resizeResaveAndDisplayPhoto aufgerufen wird, wird die folgende AsyncTask

ausgeführt %Vor%

Sie werden feststellen, dass ich die Ausrichtung vor der Aufnahme gesperrt habe und die Kamera 10 Sekunden nach dem Anzeigen des Fotos entsperrt habe. Dieser Trick ist Teil meiner Fehlersuche. Also hier ist die Situation. Das oben beschriebene System funktioniert sehr gut. Im folgenden Fall treten Probleme auf.

  • Angenommen, ich habe bereits ein Foto im ImageView, möchte es aber ersetzen.
  • Also klicke ich auf ImageView, um ein neues Foto zu machen.
  • Wenn ich das Gerät rotiere, um das neue Foto aufzunehmen, dann wird das neue Foto kurz angezeigt, bevor das alte Foto zurückkehrt.
  • Ich richte mich also auf die Orientierung ein, um zu sehen, was passiert ist. Hier ist was ich gefunden habe.
  • Das neue Foto wird angezeigt, solange ich die Ausrichtung festhalte. Sobald die Ausrichtung entsperrt wird (10 Sek.), Kehrt das alte Foto zurück.
  • Wenn ich die Aktivität und die Rückgabe verlasse, wird das alte Foto weiterhin angezeigt.
  • Wenn ich die App komplett schließe und dann zurückkomme, dann sehe ich das neue Foto.
Nouvel Travay 25.02.2016, 22:56
quelle

1 Antwort

0

Wenn das Gerät gedreht wird, wird die laufende Aktivität sowie die damit verbundene asyncTask neu erstellt, was wahrscheinlich zu einem Leck führt.

Sie müssen wahrscheinlich die asyncTask innerhalb eines Service statt in einer Aktivität aufrufen, damit die asyncTask an den Lebenszyklus des Service angefügt wird.

    
cherif 01.03.2016 23:53
quelle