java Android编程:如何摆脱while循环?
我的程序应该重复一个方法,直到按下一个按钮。 我试过了,但不管用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tts = new TextToSpeech(this, this);
Button button1 = (Button)findViewById(R.id.button1);
Button button2 = (Button)findViewById(R.id.button2);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
}
public void onClick (View v){
switch(v.getId()) {
case R.id.button1:
mainprogram();
break;
case R.id.button2:
perform = false;
break;
}
}
public void mainprogram(){
while(perform == true){
speak();
}
}
(当然,我编程了“speak()”方法)
你能告诉我问题出在哪里吗?或者有什么方法可以解决它吗
# 1 楼答案
问题是循环在UI线程上运行。我猜当你开始循环时,整个UI都冻结了
你应该在另一个线程上运行它。比如:
此外,由于您从不同的线程修改了“perform”,所以还应该使perform变量可变,以便在修改发生时,其他线程可以看到这些更改
你可以在这里阅读更多关于volatile的信息: Do you ever use the volatile keyword in Java?
# 2 楼答案
由于mainprogram将在UI线程上运行,它将阻塞所有UI,直到它从循环中断
单击R.id.button2将不会响应(因为UI线程被阻止),因此执行不会设置为false
在主线程外执行mainprogram,点击按钮将在稍后某个时间停止