如何在运行时更改while循环表达式

时间:2014-01-08 07:36:01

标签: java android while-loop

我正在开发一个程序,它在一个名为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
    } 
}

1 个答案:

答案 0 :(得分:0)

从您的问题看来,您在UI线程(也称为主线程)中运行了while循环。除了驱动UI(例如绘制图像)和由UI驱动(例如,处理按钮点击事件)之外,该线程不应该做任何实际工作。任何其他工作都应该转到其他线程。因此,如果您在UI线程中运行while循环,则无法收听按钮单击事件。

您可以找到对此here的一般说明,并且有很多机制可以帮助您异步执行Record()工作,例如您可以找到的AsyncTask一个很好的教程here。我个人最喜欢的是HandlerThread,因为它非常灵活且易于扩展。您需要understand LooperMessage概念,但要充分利用它。