2010-12-01 16 views
0

どのようにAndroidのCountDownTimerを使用しますか?AndroidのCountDownTimerはどのように使用しますか?

は、私は基本的に次のシナリオがしたい:だからどちらか3秒経過

boolean 3_s_passed = false; 
// setup counter to change 3_s_passed=true when it finishes 
counter.start(); 
while(true){ 

if(3_s_passed || user_is_Done) break; 
// do some stuff which may set user_is_Done to true 

} 

またはユーザー仕上げをし、私は蚊帳の外です。 カウンタが終了する前にwhileループコードが実行されますか? CountDownTimerについての私の理解は正しいですか?

ありがとうございました

答えて

0

このためにハンドラを使用できます。 Runnableを3秒後またはユーザーがタスクを実行した後で完了するようにします。 3秒間それを掲示し、ユーザーが何でもすればコールバックを取り除く。以下のコードと同じでは適切にHandlerを使用する方法を示していますが、ユーザが自分でそれを把握する必要がありますアクションを行うことができるようにループされていない:)

Runnable action = new Runnable(){ 

    public void run(){ 
     //... 
    } 
}; 

mHandler.postDelayed(action, 3000); 
if(userDone){ 
    mHandler.removeCallbacks(action); 
    mHandler.post(action); 
} 
+0

Hmm。これを正しく理解していれば、mHandlerは3秒でメッセージキューにアクションを追加します。ただし、userDone、mHandlerがそのアクション要求をキャンセルし、Androidにメッセージキューにアクションを追加するように指示します。あれは正しいですか? userDone = trueの場合、if文の後にコードの前にアクションを実行することが保証されますか?キューのアイデアは、タイミングエラーや競合状態で常に心配しています。 – f20k

+0

あなたはハンドラの理解について正しいですが、2番目の質問はあまり明確ではありません。あなたがmHandler.post(action)を呼び出すと、実行していることを間違いなく実行します。 – schwiz

+0

あなたの返事をありがとう。 2番目の部分を明確にするために、if文の後にコードがあり、mHandler.post(action)が実行されたとします。私のコードより前に実行することが保証されますか? – f20k

0

このクラスを使用しないでくださいそれはキャンセルメソッドでレースを含んでいます。 https://code.google.com/p/android/issues/detail?id=58668

オンレックとキャンセルの間にレースの場合キャンセルはできません。

レースなしでゼロから実装する方が良いです。 それ以外の場合は、公式修正まで問題が発生します。

関連する問題