1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Korrekter Abbruch eines laufenden Downloads

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Unicate, 06.06.2012.

  1. Unicate, 06.06.2012 #1
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    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:

    • der aktuelle Download abgebrochen werden
    • die ältesten Downloads aus der Liste geworfen werden
    Letzteres funktioniert ganz hervorragend. Nun passiert folgendes:


    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)
    
    
    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?
     

Diese Seite empfehlen