2013-04-30 3 views
0

Je suis un peu rouillée avec le verrouillage, et j'essaie de faire une communication réseau simple sur mon application Android. Inutile de dire, vous devez utiliser AsyncTask dans android pour faire ces communications. Comment puis-je verrouiller le fil principal jusqu'à ce que le AsyncTask soit terminé?Verrou/Condition avec AsyncTask?

public int read(){ 
    ReadTCPTask t = new ReadTCPTask(); 
    boolean canGoOn = false; 
    // We can proceed once we acquire the lock? 
    while (!canGoOn) 
     canGoOn = lock.tryLock(); 
    t.execute(); 
    // something that will wait here until the asynctask is done? 
    return readSize; 
} 

Répondre

3

La façon la plus simple est l'OMI de déclarer votre AsyncTask et stocker une référence à elle:

MyTask task = new MyTask(); 
task.execute(); 

Alors où vous voulez bloquer jusqu'à AsyncTask appel d'achèvement:

task.get(); 

C'est il! Bien que le blocage du thread principal ne soit probablement pas la façon dont vous voulez vous y prendre. Il est plus commun d'utiliser un rappel du AsyncTask pour mettre à jour le thread principal lorsqu'il est terminé.

+0

+1 pour le rappel. Ne bloquez pas le fil principal. – kabuko

+0

À des fins de test, cela fonctionne. Je me pencherai plus tard sur les rappels lorsque je l'utilise dans un système réel. Merci. – MasterGberry

0

Je crois que l'objectif principal de AsyncTask est de ne pas bloquer le thread principal. AsyncTask est conçu pour faciliter la communication entre les threads UI et non-UI. Donc, si vous voulez bloquer le thread d'interface utilisateur, vous pouvez simplement écrire les instructions dans le Activity lui-même.