繁体   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