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