14

我使用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 但它不计入,因为它只需要 var 值(2000)并且只是等待那个时间,而不管将time_to_wait值更改为任何其他值。

4

3 回答 3

29

这可以通过轻松创建一个将由处理程序显示的可运行程序来实现,然后将处理程序创建为静态成员,最后当您想要停止它时,只需删除您创建的可运行程序的回调,如果您想重新启动它,您有删除回调并重新分配:

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);
}
于 2016-08-01T14:33:02.693 回答
0

你可以试试

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

每次您需要先删除消息,然后发送新消息。

于 2014-04-03T14:06:46.227 回答
0

KOTLIN 版本:(#Muhammed Refaat 的回答):

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()
}
于 2020-05-04T11:27:12.593 回答