Android:while循环有效吗?

| 目前,我正在使用以下结构:
while(continue)
{
    if(somethingChanged)
    {
        draw();
    }
}
这种等待方式是否有效,还是有更好的方法呢? - 根据要求,更多信息: 我在SurfaceView上进行绘制,并使用一个线程锁定Canvas并调用onDraw(Canvas)方法。当我绘制的东西没有改变时,我不需要调用onDraw(Canvas)方法,因此我保留了一个布尔值somethingChanged。 另外,当我触摸屏幕时,我会在触摸点绘制一个圆形,因此,当我触摸屏幕时,somethingChanged为true。     
已邀请:
您还可以使用
wait()
并在其他事物更改时将其他线程
notify()
变为该线程(如果somethingChanged被其他线程更改)。     
您可能正在玩游戏,所以我建议您发表以下文章:http://dewitters.koonsolo.com/gameloop.html对于您的请求,有非常好的解决方案。     
与标准Java方法相比,Android在闲置循环方面具有更好的机制。 它由一个Looper和一个Handler组成,可以为您完成工作:
Handler myHandler;
...
public void run() { 

       Looper.prepare(); //this tells Android that your thread will contain a loop

       myHandler = new Handler() {

              public void handleMessage(Message msg) {
                      draw();  
              }
       };
Looper.loop; //starts the loop
}
调用draw方法所需要做的就是向该处理程序发送一条消息,而不是设置布尔var。
Message mess;
myHandler.sendMessage(mess)
这样,您还可以将该消息中的任何对象发送到循环中,而android会为您执行线程同步和消息队列的操作。而且-最重要的是-它也是有效的。     
如果什么都没有改变,这是一个无限循环,很可能会使用100%的cpu,因此我想说你至少应该添加一些
Thread.sleep()
调用以使其他线程有机会做某事(例如更改
somethingChanged
的值)     
通常,在无限循环中,您应该具有某种机制来避免它占用CPU的所有时间。例如,通过睡眠来完成。即使短暂的睡眠也会减轻处理器的使用。  假定此代码在线程中:
while(continue)
{
    if(somethingChanged)
    {
        draw();
    }
    Thread.sleep( mySleepTime );
}
    

要回复问题请先登录注册