1つのスレッドを2秒間実行させ、別のスレッドを3秒間実行させる方法を見つけようとしています。私は以下のランナブルを使用しています:Android/Java - ハンドラまたはスケジューラを使用してランナブルを遅延させますか?
private Runnable setLocation, checkWriteAttempt;
{
setLocation = new Runnable() {
@Override
public void run() {
// Get Location
String location = FM.getLocation(SingletonSelectedMAC.getMAC());
Log.e("Lockdown Pin", "Room Number = " + location);
mConfirm.setEnabled(false);
mCancel.setEnabled(false);
}
};
checkWriteAttempt = new Runnable(){
@Override
public void run(){
if(SingletonWriteData.getWasDataWritten()){
startAlertActivity();
}
else{
restartActivity();
}
}
};
}
私はスレッドを開始するには、以下のメソッド "tryToWriteData"を呼び出しています。
最初の試みは、postDelayedを使用して一定時間スレッドを実行するハンドラを使用することでした。しかし、runnable "setLocation"と "checkWriteAttempt"は同時に実行されますが、私のプログラムでは動作しません。それ以外にも、新しい活動が始まり、うまくいくでしょう。
後で、私はScheduledExecutorを使ってみました。しかし、この方法を使うと、自分のアンドロイドデバイスで私の活動は変わらず、実行時に実行ファイルからLog.e出力を受け取ることはありません。実行可能ファイルは、Bluetoothデバイス(ライト)にデータを送信しているため、確実に呼び出されています。以下を参照してください:
public void attemptToWriteData(){
scheduledExecutor.scheduleWithFixedDelay(setLocation, 0, 2, TimeUnit.SECONDS);
scheduledExecutor.scheduleWithFixedDelay(checkWriteAttempt, 2, 3, TimeUnit.SECONDS);
scheduledExecutor.shutdown();
/*
mHandler.postDelayed(setLocation, 2000);
mHandler2.postDelayed(checkWriteAttempt, 3000);
*/
}
両方のスレッドがBluetoothデバイスからの背景情報を処理する時間を必要とし(それが仕事に関係あるように私はランナブルからこの部分を省略しています)。
ありがとうございました!
https://stackoverflow.com/questions/2029118/run-code-for-x-seconds-in-javaを参照してください。 – Oleg