[英]Pausing and Resuming android thread in stateView class
我目前正在实现一个Android游戏,在暂停和恢复线程时遇到问题。 这是com.andromeda.bubbleshooter软件包;
导入android.graphics.Canvas; 导入android.view.SurfaceHolder;
公共类MainThread扩展了Thread {
// flag to hold game state
private boolean running;
public static boolean stop;
private SurfaceHolder surfaceHolder;
public GameLoop gamePanel;
public MainThread(SurfaceHolder surfaceHolder, GameLoop gamePanel) {
super();
this.surfaceHolder = surfaceHolder;
this.gamePanel = gamePanel;
}
public void setRunning(boolean running) {
this.running = running;
}
@Override
public void run() {
Canvas canvas = null;
while (running) {
// update game state
// render state to the screen
try {
canvas = this.surfaceHolder.lockCanvas();
synchronized (surfaceHolder) {
// if (running)
gamePanel.draw(canvas);
}
} finally {
// in case of an exception the surface is not left in
// an inconsistent state
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
} // end finally
}
}
}`
在扩展surfaceView的Game循环类中,我正在初始化构造函数中的线程,当单击暂停按钮时,我调用.setRunning(false),而在恢复时我调用.setRunning(true)。 暂停游戏可以,但单击返回按钮即可恢复正常,游戏不会冻结。
这是因为当您在暂停中将isRunning设置为false时,您退出了while循环并离开了run函数,这导致线程结束。 而不是设置isRunning,您应该提供其他形式的同步。 一种浪费的方法是使用一张票来获得信号灯。 您可以在pause()中使用它,然后在resume()中释放它,然后在每次主线程循环运行开始时将其释放。 这样,如果您暂停了,您将等待信号量释放后再运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.