我正在尝试制作将在屏幕上显示文字的功能,并在几秒后消失。我已使用Handler
和Timer
类进行了管理。
问题是如果用户在计时器的时间过去之前通过键盘输入并再次重新运行计时器以显示不同的数据,我需要以某种方式停止执行这些计时器。
我面临的问题是视图在用户输入后仍然可见,并在1-2秒后消失,而不是在5秒后消失。
我使用的代码:
//do something
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//do something again
}
}, 5000);
}
和
//do something
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// this code will be executed after 5 seconds
//do something again
}
}, 5000);
你能帮我解决这个问题吗?
感谢
答案 0 :(得分:1)
对于计时器,您可以使用timer.cancel();
,对于处理程序,您可以使用handler.removeCallbacks(runnable);
因此,只需将Runnable runnable声明为全局变量,然后将其实例化为
handler.postDelayed(runnable = new Runnable() {
@Override
public void run() {
//do something again
}
}, 5000);
这是您在removeCallbacks时传递的runnable。类似地,您可以使用此handler.removeCallbacks(null);
这将停止已声明的所有处理程序。我建议您将处理程序和计时器都声明为全局变量,并在调用计时器任务时仅对它们进行实例化。