2011-10-06 2 views
6

Folks,Android - Une bonne façon d'attendre l'objet gestionnaire à créer

Voici un code simplifié pour mon fil de fond:

public class MyThread extends Thread { 
     private Handler _handler; 

     public void run() { 
     Looper.prepare(); 
     this._handler = new Handler(); 
     Looper.loop(); 
     } 

     public void DoSomething() { 
     if (!this.isAlive()) { 
      this.start(); 
     } 

     this._handler.post(blah); 
     } 
    } 

Le problème que j'ai est que le fil d'arrière-plan ne peut pas avoir encore créé l'objet gestionnaire lorsque l'appel post() est fait. Essentiellement, j'ai besoin d'une boucle d'attente pour que l'objet gestionnaire soit initialisé. Qu'est-ce qui est généré méthode acceptée de le faire sous Android?

Merci d'avance pour votre aide.

Cordialement, Peter

+0

Voulez-vous dire ".. créé l'objet gestionnaire lorsque * DoSomething() * appel est fait"? –

+0

Essentiellement oui. Nous ne créerons pas cet objet gestionnaire jusqu'à ce que start() soit appelé (pour la première fois) par DoSomething(). Mais nous devons attendre que le thread bg démarre et que l'objet handler ait été créé. Actuel, j'ai une boucle while où je dors pendant 50 ms et vérifie si le handler a été créé. Je me demande s'il y a un meilleur moyen. Merci – Peter

Répondre

3

Vous pouvez définir un drapeau après l'initialisation du gestionnaire et attendez ce drapeau avant d'appeler post.

Un moyen facile d'attendre un drapeau dans un système concurrent est avec un CountDownLatch. Il commencerait à 1 et diminuerait après l'initialisation du gestionnaire. Consultez les détails ici: http://download.oracle.com/javase/1,5,0/docs/api/java/util/concurrent/CountDownLatch.html

+0

Merci pour votre aide. Cela ressemble exactement à ce dont j'ai besoin. – Peter

Questions connexes