2014-12-05 19 views
2

我創建了正在運行的應用程序,並試圖在用戶按下開始按鈕時創建塞子。 但是當我使用線程的應用程序返回黑屏 ,這是我的onCreate方法我附加螺紋嘗試在我的應用程序中創建塞子

Thread t = new Thread() { 
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 

        SetTextOnView(); 

       } 
      }); 
     } 
    }; 
     t.start(); 

的SetTextOnView方法包含

public void SetTextOnView() 
{ 
    TextView timedisp = (TextView) findViewById(R.id.stopperdisplay); 
    while(true) 
    { 
    timedisp.setText(String.valueOf(total)); 
    } 



} 

當我加入而statment 爲什麼這個問題開始就是它?

+0

你做一個無限循環使用一些工作在主(= UI)線程中。因此,應用程序開始不響應,然後顯示一個黑屏 – Jivy 2014-12-05 15:31:30

+0

因此,如果我想創建限制用戶的行走時間,當他按下開始按鈕時,我怎麼能沒有時間呢? – boazDotnet 2014-12-05 15:36:36

+0

你需要的時間,但不是在主線程,你需要在每個setText之間添加一些延遲。 – Jivy 2014-12-05 15:44:35

回答

1

執行循環在你的線程不會阻塞UI線程+添加一些延遲,不會阻塞UI線程:

Thread t = new Thread() { 
    public void run() { 
     while (true) { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        SetTextOnView(); 
       } 
      }); 
      Thread.sleep(1000); 
     } 
    } 
}; 

而且你SetTextOnView:

public void SetTextOnView() 
{ 
    TextView timedisp = (TextView) findViewById(R.id.stopperdisplay); 
    timedisp.setText(String.valueOf(total)); 
} 
+0

感謝工作完美! :)我didnt知道,我需要在線程內設置延遲,所以爲了我自己的理解,當我創建線程我需要添加共振延遲,我不想讓那個線程打擾主線程(我是它的線程運行oncreate方法,所以..)是嗎? – boazDotnet 2014-12-05 16:06:13

+0

是的,主線程(= Android中的UI線程)是管理活動的生命週期,顯示器,接口等的人......你需要儘可能釋放這個線程以獲得反應式應用程序。所以,循環和延遲在這裏每秒只執行setText一次,以儘量減少對應用程序的影響。 – Jivy 2014-12-05 16:22:23

相關問題