[英]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.