我的应用程序中现在有一个动画加载器。
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计时器。
实施此方法的最佳方法是什么?
答案 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