Android:延迟函数执行和取消执行的可能性

时间:2014-07-05 13:19:02

标签: java android

我的应用程序中现在有一个动画加载器。

    public void startLoader() {
        Runnable task = new Runnable() {
             @Override
             public void run() {
                lock = true;
                loader.setVisibility(View.VISIBLE);
            }
        };
        runOnUiThread(task);
    }

    public void stopLoader() {
        Runnable task = new Runnable() {
             @Override
             public void run() {
                lock = false;
                loader.setVisibility(View.GONE);
            }
        };
        runOnUiThread(task);
    }

现在我希望它能像这样工作:

stopLoader应该延迟执行1000ms,因此在调用stopLoader后它会消失1秒。 但如果在1000毫秒内调用startLoader,则会取消stopLoader计时器。

实施此方法的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您应该使用Handler而不是runOnUiThread 使用handler,您可以使用handler.removeCallbacks(runnable)取消任何延迟的任务。

Handler mHandler = new Handler();
Runnable startTask = new Runnable() {
         @Override
         public void run() {
            lock = true;
            loader.setVisibility(View.VISIBLE);
        }
    };
Runnable stopTask = new Runnable() {
         @Override
         public void run() {
            lock = false;
            loader.setVisibility(View.GONE);
        }
    };
public void startLoader() {
   mHandler.removeCallbacks(stopTask);
   mHandler.post(startTask);
}

public void stopLoader() {
   mHandler.postDelayed(stopTask, 1000);
}

了解更多here