2016-03-26 16 views
-1

私のサービスで私は以下のコードを持っていると私はフラグが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 static boolean flag = false;常にその値がメモリから読み込まれます。 –

答えて

0

break;キーワードを使用してループを解除します。だからあなたのためにループのように見えるかもしれません:

if(condition) { 
    break; 
} 
+0

これは休憩やリターンの問題ではありません。ダウンロードプロセスに苦しんでいる間に終了する必要があります。方法はありますか? – solo

+0

@Charanor、あなたがソロによる質問に投稿されたコードを見れば、ブレークの代わりにすでに 'return'ステートメントがあります。これはとにかくループを破ります。 –

+0

あなたの質問では、私はあまりにも多くの時間を取ることを意味する "つまらない"と推測している - 私はあなたがダウンロードが実行されているかどうかを確認することをお勧めし、上記の場合は、ブレーク;コード。 – Charanor

関連する問題