1

forループには、handler.post()を呼び出すメソッドがあります。forループ内にログメッセージを16回出力するlogステートメントがあります(forループが16回実行されたことを示します)。同様に、run()内にもう1つのログメッセージがありますが、残念ながらアプリはこのログメッセージを300回(約)印刷します。これは理想的には16回だけ印刷する必要があります。誰かが私に間違いを理解するように導くことができますか?

コードスニペットは次のとおりです。

     do
    {
      final Handler handler = new Handler(); 
      System.out.println("KKKKKKKKKKKKKKKKKKKKKKKKKKKK");
      handler.post(new Runnable() {
        @Override public void run() { 
            System.out.println("IIIIIIIIIIIIIIIIIIIIIIIIII");

              // Post again 16ms later.
               boolean booleanHandler= handler.postDelayed(this, 32); 
               System.out.println("******************************"+booleanHandler);
            } });
   }
while(16 times)

編集:条件が削除された場合

4

3 に答える 3

0

このようにしてください:

//declare like this
private Handler handler = new Handler();

// call in oncreate()
handler.postDelayed(runnable, 30000); //30sec

//inside this function which u have to run
private Runnable runnable = new Runnable() {
    public void run() {


        handler.postDelayed(this, 30000);
    }
};
于 2013-02-26T08:50:37.963 に答える
0

tの値はハンドラー内で変更されていないように見えるため、これはハンドラーへの無限の呼び出しです。

于 2013-02-26T08:18:19.383 に答える
0

問題は変数tにあります。(t> = 0 && t <= 1.0)が真の場合、tが変更されるまで、コードはハンドラーに何度も自分自身を投稿します。したがって、正確に16回の実行が必要な場合は、Runnable内でhandler.post()を呼び出したり、実行する前にtを変更したりしないでください。

于 2013-02-26T08:32:07.087 に答える