2011-10-06 7 views
6

皆さん、アンドロイド - ハンドラオブジェクトは、ここで

を作成するのを待つための適切な方法は、私のバックグラウンドスレッドのために単純化されたコードです:

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); 
     } 
    } 

私が持っている問題は、バックグラウンドスレッドが持っていないことですpost()呼び出しが行われたときにハンドラオブジェクトを作成しました。基本的には、ハンドラオブジェクトを初期化するための待機ループが必要です。 Androidでこれを行う方法は何が認められていますか?

ご協力いただきありがとうございます。

よろしく、 ピーター

+0

* DoSomething()*呼び出しが行われたときにハンドラオブジェクトが作成されましたか? –

+0

本質的にはい。 DoSomething()からstart()が(最初に)呼び出されるまで、そのハンドラオブジェクトは作成されません。しかし、bgスレッドが実行を開始し、ハンドラオブジェクトが作成されるまで待つ必要があります。現在、私は50msの間スリープし、ハンドラが作成されているかどうかをチェックするwhileループを持っています。もっと良い方法があるのだろうかと思っています。ありがとう – Peter

答えて

3

あなたはハンドラを初期化した後にフラグを設定し、postを呼び出す前に、このフラグを待つことができます。

並行システムでフラグを待つ簡単な方法は、CountDownLatchです。ハンドラが初期化された後、1から始まりデクリメントされます。ここで詳細を確認してください: http://download.oracle.com/javase/1,5,0/docs/api/java/util/concurrent/CountDownLatch.html

+0

あなたの助けをありがとう。これはまさに私が必要とするもののように見えます。 – Peter

関連する問題