2013-02-08 26 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代碼放到一個單獨的線程..