2013-02-08 31 views
0

我正在为我测试项目工作,所以我现在可以了解更多信息,所以现在我需要通过for(;;)循环每隔250毫秒更新一次TextView的文本,它发生在按钮点击后...我的问题是,每当我按下该按钮我的应用程序冻结(是我的按钮完全工作,通过以前的测试验证),我使用处理程序的主线程不受影响该Runnable到了......这是我的按钮和处理程序的代码...不断通过for()循环和Handler来更新文本

final Handler handler = new Handler(); 
     B3.setOnClickListener(new View.OnClickListener() { 


      @Override 
      public void onClick(View v) { 

       handler.post(new Runnable() { 

        @Override 
        public void run() { 
         // TODO Auto-generated method stub 
         for(;;){ 
          String a = Shells.sendSingleCommand("free");//Here I send a command "free" and it returns its output 
          text.setText(a);//text is my TextView which is used through my experimentations ... 
          synchronized(this){ 
           try{ 
            wait(250); 
           }catch(Exception e){ 

           } 
         } 

         } 
        } 
       }); 
       } 

     }); 

如果你不再需要问的信息请:)

回答

3

使用handler.postDelayed更新的TextView每250毫秒不断,而不是使用for loop避免冻结当前的活动为:

Handler handler=new Handler(); 
B3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        handler.post(runnable); 
       } 

     }); 
Runnable runnable=new Runnable(){ 
    @Override 
    public void run() { 
     String a = Shells.sendSingleCommand("free"); 
     text.setText(a); 
     handler.postDelayed(runnable, 250); 
    } 
}; 
+1

我们都以同样的方式回答:)因此即时删除我的答案。 – Chris 2013-02-08 13:34:21

+0

正是我需要的,非常感谢! – Seaskyways 2013-02-08 14:57:48

+0

这给出了一个编译错误。 'runnable'声明中的'runnable'给出'未初始化'错误。 – Sudhanshu 2015-10-13 00:56:56

0

Android不允许您在主线程中执行长时间任务。如果你需要做这样的事情,我建议移动for循环和depdendent代码放到一个单独的线程..