2017-09-27 1 views
0

Ich arbeite an einer Android-App, die irgendwann einen Dienst ausführt. Dieser Dienst führt einen neuen Thread für eine zeitaufwendige Operation aus und wartet darauf, dass countDownLatch null ist. Danach läuft ein zweiter Thread für eine andere zeitraubende Operation (dieser neue Thread ist jetzt nicht wirklich notwendig, wird aber in naher Zukunft sein).CountDownLatch.await() Hintergrundthreads aussetzen

Jetzt ... nach dem Starten der DownloadThread, wenn ich das Warten tun, wie unten gezeigt, den Haupt-Thread UND die DownloadThread-Operationen. Wenn ich jedoch auf den countDownLatch innerhalb von uploadThread warte, funktioniert alles einwandfrei.

Thread downloadThread = new Thread(new Runnable() { 
@Override 
public void run() { 
    downloadFiles(mMediaFileList); 
} 
}); 

downloadThread.start(); 

try { 
Log.d("UploadMedia", "Waiting for DownloadMedia to finish"); 
mCountDownLatch.await(); 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 

Thread uploadThread = new Thread(new Runnable() { 
@Override 
public void run() { 
    uploadMedia(); 
} 
}); 

uploadThread.start(); 

Es ist nicht wirklich ein Problem, aber sollte es nicht in beide Richtungen funktionieren? Was fehlt mir an der .await() - Funktionalität?

Prost!

Bearbeiten: FYI, downloadFiles hat Callbacks, die auf die Fertigstellung oder das Scheitern der Aufgabe warten. Kann es sein, dass diese Rückrufe an dem Hauptthread arbeiten, der von der .await() angehalten wird?

Antwort

0

Es ist nicht ersichtlich, wo Ihr Latch heruntergezählt wird. Aber es hört sich so an, wie es bei uploadMedia() passiert. Wenn dies der Fall ist, wird Ihr Hauptthread bei latch.await() veraltet, weil es keinen anderen Kontrollfluss gibt, der den Latch auf Null zählen könnte.

+0

Vielen Dank für Ihre Eingabe! Tatsächlich wird der Latch innerhalb von downloadMedia heruntergezählt. Wenn der Signalspeicher auf Null steht, bedeutet dies, dass alle Dateien heruntergeladen wurden. uploadMedia greift einfach alle verfügbaren Dateien auf und lädt sie hoch. Die Methoden, die Callbacks in downloadFiles implementieren, stammen aus einer Bibliothek von Drittanbietern ... deshalb bin ich mir nicht sicher, wo diese Callbacks "gesendet" werden. – Koopa

Verwandte Themen