使用Handler多次触发可运行的效果

时间:2017-05-23 11:41:08

标签: java android multithreading handler runnable

我有像这样简单的可运行

private Runnable runnable = new Runnable()
{
    @Override
    public void run()
    {
        someVariable = true;
    }
};

我将它与Handler一起使用并像这样延迟

handler.postDelayed(runnable, 60000);

如果此功能被垃圾邮件并重复调用上述内容,则会将多次runnable添加到邮件队列中。

如果是这种情况,那么在添加另一个之前是否先检查消息队列中是否有一个?

1 个答案:

答案 0 :(得分:2)

我的方法是在处理程序运行一次后删除消息和回调。我的代码的一个简单示例是

final Handler handler = new Handler();

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            Log.d("runnable", "handler invoked just once");
            handler.removeCallbacksAndMessages(null);
        }
    };

    handler.postDelayed(runnable, 2000);
    handler.postDelayed(runnable, 2000); // demo: if this is called multiple times my runnable code wont run