我正在开发一个程序,它在一个名为Record()
的本地函数中运行while循环。按下名为X的按钮时,变量条件变为true并且记录功能运行。我希望当按下另一个按钮Y时,条件会被更改,因此循环停止时。
问题是:当while循环启动时,它不会听到按钮Y的点击。我该怎么办。通过从其他函数更改其条件来停止while循环。
示例代码如下所示:
// clicking Button Y
private View.OnClickListener XonClickListener = new View.OnClickListener() {
@Override
public void onClick(View arg0) {
condition = true;
record();
}
}
// clicking Button Y
private View.OnClickListener YonClickListener = new View.OnClickListener() {
@Override
public void onClick(View arg0) {
condition = false;
}
}
// Record function
private void Record(){
while (condition){
// do something
}
}
答案 0 :(得分:0)
从您的问题看来,您在UI线程(也称为主线程)中运行了while
循环。除了驱动UI(例如绘制图像)和由UI驱动(例如,处理按钮点击事件)之外,该线程不应该做任何实际工作。任何其他工作都应该转到其他线程。因此,如果您在UI线程中运行while循环,则无法收听按钮单击事件。
您可以找到对此here的一般说明,并且有很多机制可以帮助您异步执行Record()
工作,例如您可以找到的AsyncTask
一个很好的教程here。我个人最喜欢的是HandlerThread
,因为它非常灵活且易于扩展。您需要understand Looper
和Message
概念,但要充分利用它。