随时修改Runnable类属性

时间:2016-04-02 21:39:21

标签: java android multithreading

是否可以在实现Runnable接口的类中修改属性?

我在实现Runnable接口的GamePanel类中创建了一个游戏循环。 但是,正如我所料,不可能像这样修改布尔属性:

public class GamePanel extends SurfaceView implements Runnable {
    private volatile boolean _isPaused;
    public synchronized void setPause(boolean b) {
        _isPaused = b;
    }

    public synchronized boolean getPause() {
        return _isPaused;
    }

    @Override
    public void run() {

        while (!_isPaused)
            draw();
   }

   public void draw()
   {
       if (_isPaused)
            drawPauseScreen();
        else
            drawGameScreen();
    }
}

在我的MainActivity中,我有一个监听器附加到一个简单的按钮:

private View.OnClickListener buttonPauseListener = new View.OnClickListener() {

  @Override
  public void onClick(View v) {
      _gamePanel.setPause(!_gamePanel.getPause());
  }

};

当我点击暂停按钮时,布尔值会被更改,但是点击它会不再改变布尔值。

1 个答案:

答案 0 :(得分:1)

你可以在你做的时候更改布尔值,但我不介意遵循最佳做法。

你当前的问题是你退出while循环,因此只要你将布尔值更改为true就不再运行runnable,因此它不再绘制了。

编辑: 我建议使用AtomicBoolean来使代码更清晰。