2013-02-26 32 views
1

在for循环中,有一个调用handler.post()的方法。在for循环中存在一条记录语句,其中打印日志消息16次(表示循环执行了16次)。同样,run()中还有一条日志消息,但不幸的是,应用程序打印此日志消息300次(大约),理想情况下应该只打印16次。有人能指导我了解错误吗?Android中处理程序的代码

代码片段是:

 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) 

编辑:如果状态拆下

回答

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

我可以在循环中执行处理程序吗? – 2013-02-26 09:44:14

+0

亚......你可以在循环中使用 – 2013-02-26 09:48:18

+0

上面代码中的问题是什么? – 2013-02-26 09:51:08

0

这是处理程序的无限通话,因为的T值似乎并不T为您处理

0

内部改变问题在变量t中。如果(t> = 0 & & t < = 1.0)为真,那么你的代码会一次又一次地将自己放入一个处理程序中,直到t被更改为止。所以,如果你只需要16次执行,那么你不应该在你的Runnable中调用handler.post(),或者在执行之前改变它。

+0

对不起,这里的t值是变化的,但它没有反映我们的条件 – 2013-02-26 09:56:50

+0

还有一个猜测:如果你从另一个线程变化率T,那么你应该考虑使用“挥发性”键-word - 因此,您可以避免由VM更新t值的延迟。 – tundundun 2013-02-26 10:43:06

相关问题