暗黙のユーザー インターフェイス スレッドと並んで、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*/
}
}