私の新しいAndroidアプリケーションの場合、アプリケーションが3秒間タイムアウトする関数が必要です。次のように関数 "sleep()"を試しました:
seekBar1.setProgress(50); // Set something for my SeekBar
try{
Thread.sleep(3000); // Wait for 3 Seconds
} catch (Exception e){
System.out.println("Error: "+e); // Catch the exception
}
button.setEnabled(true); // Enable my button
動作しているようですが、アプリケーションを実行している場合は、次のように動作します。3秒待って、進行状況を設定し、ボタンを有効にします。最初に進行状況を設定してから3秒待ってから、ボタンを有効にします。
"sleep()"は私の使用に適していますか、それともアプリケーションが正しい順序で実行できることを他に何ができますか?
次のようにpostDelayed()
メソッドを使用できます。
handler=new Handler();
Runnable r=new Runnable() {
public void run() {
//what ever you do here will be done after 3 seconds delay.
}
};
handler.postDelayed(r, 3000);
スリープ状態でUIスレッドをブロックしないでください。別のスレッドでスリープしても問題ありませんが、それでも回避する必要があります。これを行う正しい方法は、ハンドラにRunnableをポストすることです。次に、Runnableのrun()メソッドに遅延後に実行するコードを配置します。
アクティビティでHandle
を定義し、アクティビティのHandle.postDelayed()
からonCreate()
を使用して、3秒でそのハンドルに関するメッセージを受信できます。受信すると、ボタンを有効にできます。
AsyncTask
を使用しても同じことができます。doInBackground()
では、3秒間スリープします。次に、onPostExecute()
でボタンを有効にします。
Handlerクラスのオブジェクトを使用し、メソッドhandler.postDelayed(thread、time)を使用します。sleep()を使用しないでください。UIスレッドをブロックします。