2016-05-04 9 views
3

私のプロジェクトの1つでは、無限ループが必要です。ループを終了するには、唯一の条件は他のスレッドにflag = trueを設定することです。タイマーを使用してループから抜け出すためにお勧めの方法だろう何Androidでタイマーを使用して無限ループを解除する

flag = false; 
While(true) { 
    if (flag) break; 
} 

?次の500msの間、フラグがtrueに設定されていなければ、強制的にループを終了します。

答えて

1

Handler.postDelayed()を使用できます。私はあなたがバックグラウンドスレッドで無限ループをやっていると仮定しているので、具体的にはHandlerのスレッドとしてLooper.getMainLooper()を使用しています。メインスレッドでループしている場合は、まずはお勧めしない可能性があります。Handlerを更新して、別のスレッドのLooperを使用する必要があります。

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     flag = true; 
    } 
}, 500); 

別の選択肢は、所望の時間のために、睡眠を新しいThreadを作成し、それに応じてフラグを設定することです。

new Thread(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      Thread.sleep(500); 
     } catch (InterruptedException e) { 
      Log.e("Timeout Thread", "Interrupted", e); 
     } 

     flag = true; 
    } 
}).start(); 
関連する問題