0

だから私は次のスレッドを持っています:

  public class MyThread extends Thread
{
  Handler cHandler;
 private boolean looprunning = false;
  MyThread() {
  cHandler = new Handler();
          looprunning = true;

  }

  @Override
  public void run(){
      while (looprunning) {
          //do stuff here
        //update another system here or something else.
      }
  }

}

このスレッドの while ループ内で、スレッドがその while ループ内でループしている間に、スレッドに渡す Runnable を実行したいと考えています。どうすればいいですか?

4

3 に答える 3

2

looprunning最初に、適切なスレッドの可視性のために揮発性としてマークしてください

キューを使用できます

Queue<Runnable> taskQueue = new ConcurrentLinkedQueue<Runnable>();
@Override
public void run(){
   while (looprunning) {
       //do stuff here
     //update another system here or something else.
     Runnable r = taskQueue.poll();
     if(r!=null)r.run();
   }
} 

選択した (スレッドセーフな) キューを使用できます

于 2012-05-16T12:44:04.973 に答える
1

あなたはこのようにそれを行います.runメソッド内に書いた計算は何でも、それが終わったらハンドラーにメッセージを送ります. もう 1 つ、実行中に UI のようなものを変更しようとすると、非 UI スレッドで UI を変更しようとしているため、間違いなく Leak Window エラーが発生します。

final Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {


            dialog.dismiss();

        }

    };



            dialog = ProgressDialog.show(NewTransaction.this, "",
                    "Loading Meters...", false);

            new Thread() {

                public void run() {

                    while(Condition){

                                  do Something
                                 }
                    handler.sendEmptyMessage(0);

                }

            }.start();
于 2012-05-16T13:10:44.963 に答える
1

Android には、Runnables を実行するループで実行されるスレッドを作成するためのメカニズムが既に用意されています。HandlerThreadを見てください

于 2012-05-16T12:44:32.170 に答える