Я использую метод postDelayed
из Handler
для выполнения действия через определенное время:
private static int time_to_wait = 2000;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Make Action
}
}, time_to_wait);
теперь в середине времени ожидания я хочу изменить значение оставшихся миллисекунд из-за некоторых результатов обработки, скажем, теперь он ждал 1000 мс, и я хочу, чтобы он начинал отсчет с 2000 снова. Итак, я установил значение time_to_wait
равным 2000, но оно не учитывает это, так как принимает только значение переменной (2000) и просто ждет это время независимо от изменения значение time_to_wait
на любое другое значение.
int
является примитивным типом и передается по значению - значение копируется и никак не связано с исходной примитивной переменной. Если вы передадите переменнуюint
какому-то методу, а затем попытаетесь изменить эту переменную где-то еще (вне этого метода), изменения в переменной не будут отражены в этом методе, так как он имеет собственную копию переменной - person Drew   schedule 03.04.2014Runnable r = new Runnable(...);
. Вы опубликуете это как:handler.postDelayed(r, time_to_wait);
. Тем временем вы можете отменить его, позвонив по номеруhandler.removeCallbacks(r);
. А затем опубликуйте его снова, в зависимости от логики вашего приложения. Надеюсь, это поможет. - person Drew   schedule 07.04.2014