2016-05-06 23 views
-1

Handlerを使用して時間を更新してから呼び出すスレッドを作成しました。時間が終了したら、handler.removeCallbacks(runnable)を使用してハンドラからスレッドを削除して終了します。だから私はそれを停止するスレッド内のブール値のフラグを使用します。ハンドラから実行可能ファイルを削除する

問題:時間の終了時刻は負になり始めますが、スレッドは停止していません。私はログにも見てきましたhandler.removeCallbacks(runnable)も呼ばれています。

ここでは何が欠けていますか?

private Handler handler = new Handler(); 
Runnable runnable = new Runnable() { 
    public void run() { 
     time.setText(
      String.format(
       "%d:%d", 
       TimeUnit.MILLISECONDS.toMinutes(AppController.RunningTime), 
       TimeUnit.MILLISECONDS.toSeconds(AppController.RunningTime) - 
       TimeUnit.MINUTES.toSeconds(
        TimeUnit.MILLISECONDS.toMinutes(AppController.RunningTime) 
       ) 
      ) 
     ); 
     AppController.RunningTime = AppController.RunningTime - 10000; 
     if (AppController.RunningTime <= 0) { 
      // inform user about your time is finished. 
      handler.removeCallbacks(runnable); 
      openTimeUpDailog(mContext); 
     } 
     handler.postDelayed(this, 1000); 
    } 
}; 
runnable.run(); 
+0

タイマーはどこですか? – Pehlaj

+0

実際にはカウントダウンタイマーとして動作します。 –

+0

完全なコードを表示 – Pehlaj

答えて

0

更新が見つかり、問題

それは停止しますが、handler.postDelayed(本、1000)がまだ呼ばれているので、再度カウントを開始しました。

これで問題は解決します。

if (AppController.RunningTime <= 0) { 
    handler.removeCallbacks(runnable); 
    openTimeUpDailog(mContext); 
} else { 
    handler.postDelayed(this, 1000); 
} 
関連する問題