U
Unicate
Erfahrenes Mitglied
- 57
Hallo alle zusammen!
Ich habe eine App die mir eine Reihe von Bildern in einer Gallery anzeigt.
Die Bilder werden heruntergeladen, wenn sie benötigt werden. Dazu wollte ich eine art "sliding-window" Technik implementieren, was soweit auch schon ganz gut funktioniert. Was heisst das?
Wenn die Gallery gestartet wird, werden 3 Bilder geladen (prev,current,next) wenn der Benutzer nun weiter flingt, wird das nächste geladen usw. Alle Downloads werden nacheinander in EINEM Thread heruntergeladen. Es gibt in meinem Thread also eine Liste mit downloads die der thread abarbeiten soll. Wenn Der Benutzer nun mehrfach in eine Richtung flingt, dann sollen:
Um den Download eines Bildes abzubrechen, schließe ich den InputStream und danach den Outputstream um die Übertragung zustoppen. Hier tritt dieser Fehler auf:
Ich weiß zwar nicht ob diese Exception mein Problem auslößt, aber ich weiß auch nicht wie ich das unterbinden kann. Dann versuche ich das nicht vollständige File zu löschen.
Das Bild wo der Download abgebrochen wurde, wird auch gelöscht (file.delete() gibt true zurück)
Problem ist nun, das wenn ich wieder zurück-flinge ab und zu ein Bild nicht mit angezeigt wird. Ich hatte die Vermutung, dass das File nicht richtig gelöscht wird und das es deswegen beim neu beschreiben zu einem Problem kommt. Doch nachdem ich file.delete() auf Richtigkeit geprüft hatte konnte ich das auch ausschließen.
Nun meine Frage:
Mach ich das richtig?
Gibt es vielleicht eine "bessere" Möglichkeit einen laufenden Download abzubrechen?
Ich habe eine App die mir eine Reihe von Bildern in einer Gallery anzeigt.
Die Bilder werden heruntergeladen, wenn sie benötigt werden. Dazu wollte ich eine art "sliding-window" Technik implementieren, was soweit auch schon ganz gut funktioniert. Was heisst das?
Wenn die Gallery gestartet wird, werden 3 Bilder geladen (prev,current,next) wenn der Benutzer nun weiter flingt, wird das nächste geladen usw. Alle Downloads werden nacheinander in EINEM Thread heruntergeladen. Es gibt in meinem Thread also eine Liste mit downloads die der thread abarbeiten soll. Wenn Der Benutzer nun mehrfach in eine Richtung flingt, dann sollen:
- der aktuelle Download abgebrochen werden
- die ältesten Downloads aus der Liste geworfen werden
Um den Download eines Bildes abzubrechen, schließe ich den InputStream und danach den Outputstream um die Übertragung zustoppen. Hier tritt dieser Fehler auf:
Code:
java.io.IOException: close failed: EIO (I/O error)
at libcore.io.IoUtils.close(IoUtils.java:41)
at java.io.FileOutputStream.close(FileOutputStream.java:139)
at java.io.FileOutputStream.finalize(FileOutputStream.java:153)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:182)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168)
at java.lang.Thread.run(Thread.java:856)
Caused by: libcore.io.ErrnoException: close failed: EIO (I/O error)
at libcore.io.Posix.close(Native Method)
at libcore.io.BlockGuardOs.close(BlockGuardOs.java:75)
at libcore.io.IoUtils.close(IoUtils.java:38)
Das Bild wo der Download abgebrochen wurde, wird auch gelöscht (file.delete() gibt true zurück)
Problem ist nun, das wenn ich wieder zurück-flinge ab und zu ein Bild nicht mit angezeigt wird. Ich hatte die Vermutung, dass das File nicht richtig gelöscht wird und das es deswegen beim neu beschreiben zu einem Problem kommt. Doch nachdem ich file.delete() auf Richtigkeit geprüft hatte konnte ich das auch ausschließen.
Nun meine Frage:
Mach ich das richtig?
Gibt es vielleicht eine "bessere" Möglichkeit einen laufenden Download abzubrechen?