1

暗黙のユーザー インターフェイス スレッドと並んで、2 つのスレッド (ランナブル) を作成しました。どちらも内部に while ループがあり、実装したメッセージ キュー内の更新を定期的にチェックします。

最初の問題は、2 つの while ループが無限であり、デバイスのほとんどすべての CPU を使い果たすほど急速に変化することでした。そのため、各サイクルの後に while ループを約 100 ミリ秒スリープさせて、他のスレッドが作業できるようにすることを考えましたが、別の問題に遭遇しました。

今、問題は、スレッドが 100 ミリ秒スリープすることですが、その間は UI スレッドを動作させません:( そして、これにより UI が遅くなります。画面上で何かをドラッグすると、少し遅れます。

だから私がやりたいのは、これらのスレッド (これらの while ループ) が 100 ミリ秒ごとにメッセージ キュー フラグをチェックするようにすることですが、その 100 ミリ秒の間に UI スレッドを実行させたいのです。これはどのように達成できますか?

編集1

現在のスレッドの実行を停止するyieldメソッドを見つけましたが、いつこれを呼び出すのですか? スリープ スレッドを呼び出し、同時に何らかの方法で生成する必要があります ... ??

編集2

2 つのクラスはシングルトンであり、アプリケーションの最初のアクティビティから開始するため、アプリの開始時 (UI スレッド)

//Obtain object of singleton classes
ControllerSingleton controller = ControllerSingleton.getControllerSingleton();
OpponentSingleton opponent = OpponentSingleton.getOpponentSingleton();

//Start threads
/*--------CONTROLLER----------*/
Thread t;
t = new Thread( controller );       
t.setName("ControllerThread");
Log.i("Remy","Starting Controller thread...");
t.start();

/*--------OPPONENTS----------*/
t = new Thread( opponent );     
t.setName("OpponentThread");
Log.i("Remy","Starting Opponent thread...");
t.start();

そして、それぞれの中run()に次のコードがあります:

public void run() 
{
   while( true )
   {
      //Check if any messages in the queue
      if ( queueEmpty() == false )
      {
          //Do something ...              
      }
      /*HERE IS WHERE I WOULD LIKE TO TELL THE THREAD TO STOP AND WAIT FOR 100 ms*/
   }
}
4

1 に答える 1

3

使用する必要があるのはHandler. たとえば、このチュートリアルを見たいと思うかもしれません。

于 2012-04-27T10:40:01.770 に答える