如何更改/重置处理程序延迟时间?

时间:2014-04-03 13:37:35

标签: android handler postdelayed

我使用postDelayed的{​​{1}}方法,以便在一段时间后执行操作:

Handler

现在在等待时间的中间我想要更改由于某些处理结果而剩余毫秒的值,让我们说它现在等待 1000毫秒我想做它开始从 2000 开始计数,所以,我将private static int time_to_wait = 2000; Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { // Make Action } }, time_to_wait); 值设置为2000,但它没有计算,因为它只需要var值( 2000),只需等待那段时间,无论将time_to_wait值更改为任何其他值。

3 个答案:

答案 0 :(得分:20)

这可以通过轻松创建一个将由处理程序显示的runnable,然后创建处理程序作为静态成员来实现,最后当你想要停止它时只删除你创建的runnable的回调,如果你想重启你必须删除回调并再次分配它:

Runnable myRunnable = new Runnable() {
    @Override
    public void run() {
        // your code here
    }
};

public static Handler myHandler = new Handler();
private static final int TIME_TO_WAIT = 2000;

public void start() {
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

public void stop() {
    myHandler.removeCallbacks(myRunnable);
}

public void restart() {
    myHandler.removeCallbacks(myRunnable);
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

答案 1 :(得分:0)

你可以尝试

handler.removeMessage(what)
handler.sendMessageDelayed(time_to_wait + INTERVER);

每次您需要先删除邮件然后发送新邮件。

答案 2 :(得分:0)

科特琳版:(#穆罕默德·里法特的答案):

var myHandler = Handler()
private val TIME_TO_WAIT: Long = 2000

var myRunnable = Runnable {
    // your code here
}

fun start() {
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT)
}

fun stop() {
    myHandler.removeCallbacks(myRunnable)
}

fun restart() {
    stop()
    start()
}