簡體   English   中英

在stateView類中暫停和恢復android線程

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM