gpt4 book ai didi

java - 如何优化我的代码来处理这个特殊事件

转载 作者:行者123 更新时间:2023-11-30 07:13:56 25 4
gpt4 key购买 nike

我的程序监听 3 种类型的事件:ADD、DELETE、REFRESH,它们由 UI 上的第 3 方库组件触发。我的听众看起来像这样:

//the timestamp is the time when the event occurs
public void listenToEvent(Event event, long timestamp){
if(event.getName().equals("ADD")){
//handle ADD event

}else if(event.getName().equals("DELETE")){
//handle DELETE event

}else if(event.getName().equals("REFRESH")){
//handle REFRESH event

}

}

除了 REFRESH 事件的一个小问题外,代码对每个事件都能正常工作:

当 UI 发生刷新时,3rd party lib 组件在短时间内连续触发 3 个事件,即:ADD->DELETE->REFRESH,在这种情况下我的听众认为有 3 个事件,但实际上它只是一个UI 上的刷新操作。

我如何优化我的代码,以便当 ADD->DELETE->REFRESH 非常快速地连续发生时,我的监听器可以足够聪明地知道它只是一个 REFRESH?

(ADD 和 DELETE 事件不是 REFRESH 事件的实例)

最佳答案

正如我在评论中所说,我在下面发布的这段代码正在运行(经过测试)。您可能需要对 REFRESH_TIMEOUT 进行一些调整,并可能使其成为线程安全的,但我已经测试了基本想法:

"如果ADD事件来了,为它创建一个定时器。当DELETE来的时候,检查是否已经有timertask了。如果没有->处理DELETE。如果有->处理REFRESH。如果定时器超时->处理添加”

这有点乱,但是根据您提供的信息,我认为这个解决方案可能是最容易做到的事情。如果适当的事件来得比你的 REFRESH_TIMEOUT 快,你可能会遇到问题。在那种情况下,逻辑会变得有点复杂。

long REFRESH_TIMEOUT=100;
Timer timer = null;
MyTask myTask = null;
public void listenToEvent(Event event, long timestamp){
if(event.getName().equals("ADD")){
timer = new Timer();
timer.schedule(myTask = new MyTask(event), REFRESH_TIMEOUT);
}
if(event.getName().equals("DELETE")){
if (myTask!=null && !myTask.expired){
processRefresh(event);
timer.cancel();
}else{
processDelete(event);
}
}
}

private static class MyTask extends TimerTask {
Event event;
boolean expired;
public MyTask(Event event){
this.event=event;
}
@Override
public void run() {
expired=true;
processAdd(event);
}
}

private void processAdd(Event e){
...
}
private void processDelete(Event e){
...
}
private void processRefrsh(Event e){
...
}

关于java - 如何优化我的代码来处理这个特殊事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18889141/

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