gpt4 book ai didi

android - Android 对话框回答太快时代码未执行(竞争条件)

转载 作者:太空宇宙 更新时间:2023-11-03 11:22:19 25 4
gpt4 key购买 nike

在我的 android 应用程序中,我有一个对话框,其中包含如下代码:

.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
doStuff();
doMorestuffThatTakesTime();
}
})

我注意到的是,如果我快速按下"is"按钮,doStuff() 中的代码不会执行。我想知道 dialog.cancel() 命令是否与它有关,但即使它移到最后并完全删除,问题仍然存在。

感觉像是某种竞争条件,但问题是什么,我应该如何解决这个问题?

最佳答案

警告。更多概念代码证明:您可以尝试在点击时启动一个线程,如下所示:

    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) { //cancels itself?
Thread thread= new Thread( new Runnable() {
public void run() {
try{
Thread.sleep(3000); //<== mimic time intensive task
}
catch(Exception e){
}
Log.d(TAG,"done");
myHandler.sendEmptyMessage(0);
}
});
thread.setDaemon(true);
thread.start();
dialog.dismiss();
}
});

并将消息捕获在单个 Activity 处理程序中:

private Handler myHandler= new Handler(){
@Override
public void handleMessage(Message msg){
switch(msg.what){
case 0:
this.removeMessages(0);
Log.d(TAG,"gotit");
break;
default:
super.handleMessage(msg);
break;
}
}
};

如果您尝试从新线程触摸 UI,这将不起作用。

关于android - Android 对话框回答太快时代码未执行(竞争条件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5797049/

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