gpt4 book ai didi

java - 如何在队列中使用Handler Postdelayed?

转载 作者:行者123 更新时间:2023-12-02 01:58:06 27 4
gpt4 key购买 nike

我有一个情况,我创建了一个按钮和一个像这样的函数。

...
public void BtnOnClick(View view) {

displayMsg();
}

...

private void displayMsg(){
handler.postDelayed(new Runnable() {
@Override
public void run() {
Toast.makeText(this, "TestQueue", Toast.LENGTH_SHORT).show();

}
}, 3000);

}
...

如果我单击按钮一次,Toast 应该会在 3 秒延迟后出现。但是,如果我快速单击按钮两次或多次,那么所有 Toast 在 3 秒后同时出现,而每个 Toast 之间没有延迟 3 秒,那就不好了。尽管同时点击,但我希望每个 Toast 出现之间有 3 秒的间隙/延迟。

有什么解决办法吗?

如果队列中有多个处理程序,则每个处理程序延迟时间在前一个处理程序延迟时间结束后开始。

最佳答案

您可以对请求进行排队,以确保 Toast 以一定的时间间隔显示。

ArrayList<Runnable> requests = new ArrayList<>;
bool inProgress = false;
private void displayMsg(){
Runnable runnable = new Runnable() {
@Override
public void run() {
Toast.makeText(this, "TestQueue", Toast.LENGTH_SHORT).show();
inProgress = false;
if (requests.size() > 0) {
handler.postDelayed(requests.remove(0), 3000 + Toast.LENGTH_SHORT);
}
}
}
if (!inProgress) {
inProgress = true;
handler.postDelayed(runnable, 3000);
} else {
requests.add(runnable);
}
}

关于java - 如何在队列中使用Handler Postdelayed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52039904/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com