2016-03-26 212 views
-1

在我的服務中,我有下面的代碼,當flag設置爲true時我想打破循環。除非互聯網連接速度緩慢或差,否則它運行良好。然後,因爲它堅持下載部分,循環不會有效地中斷。任何解決方法? 解決方案是使用一個定時器,週期性地(每500毫秒)檢查標誌狀態。但是我不知道如何在標誌設置爲true時打破循環!如何打破while循環?

static boolean flag = false; 

public int onStartCommand(Intent intent, int flags, int startId) {    
    new Thread (new Runnable(){ 
     @Override 
     public void run() { 
      foo(); 
     } 
    }).start();  
    return START_STICKY; 
} 

void foo(){  
    try{    
     while(true){ 
      if (flag) 
       return; 
      //download some data which takes a few seconds 
     } 
    } catch (Exception e){ 
    } 
} 
+1

你可以嘗試使標誌爲volatile:volatile static boolean flag = false;始終它的值將從內存中讀取。 –

回答

0

您使用break;關鍵字跳出循環。所以對你來說,它可能看起來像這樣在你的循環中:

if(condition) { 
    break; 
} 
+0

這不是一個休息或回報的問題。當我在下載過程中遇到困難時,我需要退出。有沒有辦法? – solo

+0

@Charanor,如果你看到問題中單獨發佈的代碼,那麼已經有一個「返回」語句來代替中斷,反正會打破循環。 –

+0

通過你的問題,我猜「卡住」你的意思是花費太多時間 - 那麼我會建議你檢查下載已經運行了多長時間,如果它在上面,讓我們說1秒鐘,你要麼翻轉;'或'打破;'代碼。 – Charanor