在我的应用程序针对Android 4.0.3,我曾经有一个按钮作为一个开关工作。点击按钮正在进行资源更改(在播放/暂停之间切换),某些任务正在后台执行。特别的是,当按下按钮时,我希望切换在短时间内不可用(以防止快速切换)。Android:切换(ToggleButton)和线程
要做到这一点,我创建了正在等待X秒线程,就像这样:
void blockButton(){
new Thread() {
public void run(){
try {
synchronized(this){
button_ready = false;
sleep(5000);
button_ready = true;
}
}
catch(InterruptedException ex){}
}
}.start();
}
}
,基本上在我的活动/ onClickListener
if(button_ready){
// Start background stuff
changeButtonResource();
button.setEnabled(false);
blockButton();
button.setEnabled(true);
}
到目前为止好,一切都奔跑顺利。但我最终希望将其更新为Switch。代码几乎相同(除了onClickListener变成了OnCheckedChangeListener)。
但现在当我点击按钮一次,再次点击它将允许更改其资源 - 但后台任务不会启动(我试过用振动器和其他人已经,它只改变资源)。
所以我几乎有我的按钮曾经有的行为,但资源被搞砸了。任何想法都会比欢迎!谢谢。
你的同步块没有做任何事('this'指的是一个局部变量,因此不共享的线程)。 'button_ready'如何声明? 'volatile'? – assylias
button_ready是类中的常规变量,并在onCreate()方法中初始化。该方法再次与一个简单的按钮完美配合,所以线程可以做一些事情(更改var,wait,更改var)。 – PeterGriffin
为了让你的代码线程安全(可能或不可能解决问题):删除同步块并将你的变量声明为volatile:'private volatile boolean button_ready;'。 – assylias