2014-12-04 54 views
0

裏面我有一個線程裏面無限循環像下面的Android尺蠖無限循環

private Thread mThread = new Thread(){ 
    while(true){ 
     Looper.prepare(); 
     Toast.makeText(context, "test", Toast.LENGTH_LONG).show(); 
     Looper.loop(); 
     Thread.sleep(15000); 
    } 
}; 

我的代碼,而無需Looper.prepare和循環,但它並沒有編譯。添加Looper代碼後,我的線程被執行一次。當然,我希望代碼每15秒執行一次。有什麼辦法可以解決這個問題嗎?

+0

是什麼問題? – jhamon 2014-12-04 08:24:53

+0

這不是很抱歉。我只想讓代碼每15秒繼續執行一次。現在我添加了Looper代碼,它只運行一次。 – YoloQ 2014-12-04 08:30:23

回答

0

Thread.sleep(15000);使得執行慢一點,所以我會建議你使用handler.postDelayed(runnable, 15000);,將優化代碼

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() {   
    @Override 
    public void run() { 
     while(true){ 
      Looper.prepare(); 
      Toast.makeText(context, "test", Toast.LENGTH_LONG).show(); 
      Looper.loop(); 
     } 
    } 
}, 15000);   
0

試着做這樣的:

聲明一個全局變量的處理程序是這樣的:

Handler gHandler = new Handler(); 

然後宣告一個新的線程:

new Thread(new Runnable() { 
     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      while (true) { 
       try { 
        Thread.sleep(15000); 
        gHandler.post(new Runnable() { 

         @Override 
         public void run() { 

          // HERE WRITE YOUR CODE :) 
         } 
        }); 
       } catch (Exception e) { 
        // TODO: handle exception 
       } 
      } 
     } 
    }).start(); 

雖然也有其他的解決方案這,但這是我如何做到這一點。希望它可以幫助你。

+0

這很有趣。任何其他解決方案的資源。它看起來像一個黑客。 – YoloQ 2014-12-04 10:17:24

+0

這是另一個:http://stackoverflow.com/questions/21726055/android-loop-part-of-the-code-every-5-seconds – JLONG 2014-12-04 11:00:07

0

事情是這樣的工作對我來說

private Thread mThread = new Thread(){ 
    Looper.prepare(); 
    while(true){ 
     Toast.makeText(context, "test", Toast.LENGTH_LONG).show(); 
     Thread.sleep(15000); 
    } 
}; 

出於某種原因,它不是necesary調用Looper.loop()