В моем случае мне пришлось выполнить процесс, если одно из этих условий было истинным: если предыдущий процесс был завершен или прошло уже 5 секунд. Итак, я сделал следующее и работал довольно хорошо:
private Runnable mStatusChecker;
private Handler mHandler;
class {
method() {
mStatusChecker = new Runnable() {
int times = 0;
@Override
public void run() {
if (times < 5) {
if (process1.isRead()) {
executeProcess2();
} else {
times++;
mHandler.postDelayed(mStatusChecker, 1000);
}
} else {
executeProcess2();
}
}
};
mHandler = new Handler();
startRepeatingTask();
}
void startRepeatingTask() {
mStatusChecker.run();
}
void stopRepeatingTask() {
mHandler.removeCallbacks(mStatusChecker);
}
}
Если процесс1 читается, он выполняет process2. Если нет, он увеличивает время переменной и делает обработчик выполняться через одну секунду. Он поддерживает цикл до тех пор, пока процесс1 не будет прочитан, а времена равны 5. Когда время равно 5, это означает, что прошло 5 секунд, и в каждую секунду выполняется условие if process1.isRead ().