Android 当屏幕被锁定和解锁时,游戏冻结

Android 当屏幕被锁定和解锁时,游戏冻结,android,sleep,lockscreen,Android,Sleep,Lockscreen,我刚刚写了一些小游戏,问题是,每次我在游戏中锁定屏幕,然后解锁,游戏就会冻结。我不知道为什么,但它发生了 现在我想知道当屏幕被锁定时,我必须改变哪种方法才能将游戏设置为暂停或恢复 是否有类似onScreenLocked()或onScreenWake()的方法 我有三个类,mainactivity,它在自己的视图中添加了一个gameview。此gameview获得了一个游戏线程,该线程不断更新gameview本身 现在,当对mainactivity调用onPause()时,它将调用gameView

我刚刚写了一些小游戏,问题是,每次我在游戏中锁定屏幕,然后解锁,游戏就会冻结。我不知道为什么,但它发生了

现在我想知道当屏幕被锁定时,我必须改变哪种方法才能将游戏设置为暂停或恢复

是否有类似onScreenLocked()或onScreenWake()的方法

我有三个类,mainactivity,它在自己的视图中添加了一个gameview。此gameview获得了一个游戏线程,该线程不断更新gameview本身

现在,当对mainactivity调用onPause()时,它将调用gameView.pause();方法

这就是这个方法(gameview.pause()):

当isPaused=true时,游戏会不断更新。如果不是,那么它就不是

当mainActivity上的onResume()调用gameView.resume()时;方法被调用,如下所示:

public void resume() {
    gameThread = new GameThread(this);
    gameThread.startThread();
            isPaused = false;
}
是的,就是这样。 现在,当在游戏中按下home(主页)按钮时,它会暂停,当重新进入游戏时,它只会在结束的地方继续

但当按下锁定按钮,然后解锁屏幕时,我只是看到游戏冻结了,我不知道为什么

解锁屏幕时,我发现游戏线程不再运行。我不知道如何修复它,因为在添加一些时

gameThread.start();
游戏将崩溃。 但是为什么游戏线程在锁定屏幕时停止工作,而在离开游戏并重新进入游戏时工作正常?

编辑:

我刚发现我的问题。我的gameView代码如下所示:

public class GameView extends SurfaceView implements OnGestureListener{

public GameView(Context context, Activity activity) {
    super(context); 
    gameThread = new GameThread(this);
    init();
    holder = getHolder();
    holder.addCallback(new SurfaceHolder.Callback() {

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {

        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            gameThread.setRunning(true);
            gameThread.start();
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {

        }
    });
}


public void init() {
}


public void update() {

}

public void draw(Canvas canvas) {
    super.draw(canvas);

}


public void pause() {
    isPaused = true;
    gameThread.setRunning(false);
}

public void resume() {
    gameThread = new GameThread(this);
    gameThread.startThread();   

}


}
我发现

public void surfaceCreated(SurfaceHolder holder) {
            gameThread.setRunning(true);
            gameThread.start();
        }
按下home键并重新进入游戏时,只需拨打电话即可,但在锁定屏幕并再次解锁时,不会呼叫。这就是线程无法启动的原因


现在我想知道如何手动调用此方法?

您应该能够使用onPause()和onResume()。查看“活动生命周期”了解更多信息。

onResume()和onPause()对我有效,但只有在按下home(主页)按钮并返回到app@user2410644-我认为我们需要更多关于您使用的框架类型的信息。它是用纯Android编写的,还是你在使用一个库来处理事情?纯Android,将把一些信息添加到我的原始postThen onPause中,即使手机被锁定,也应该调用它。添加游戏冻结时的任何日志。你怎么画?画布或OpenGL以及如何处理暂停/恢复。没有日志!这是奇怪的部分。在SurfaceView的画布上绘制,这就是游戏线程的用途。
public void surfaceCreated(SurfaceHolder holder) {
            gameThread.setRunning(true);
            gameThread.start();
        }