当屏幕被锁定并解锁时,游戏会冻结
我刚刚写了一些小游戏,问题在于,每次我在游戏过程中锁定屏幕并在解锁之后,游戏就会冻结。我不知道为什么但它发生。当屏幕被锁定并解锁时,游戏会冻结
现在我想知道哪种方法,我必须改变设置游戏暂停或恢复当屏幕被锁定。
有没有像onScreenLocked()或onScreenWake()方法?
我有三个班,mainactivity,增加了一个gameview它自己的观点。这个游戏视图得到了一个gamethread,它不断更新游戏视图本身。
现在,当onPause()在mainactivity上被调用时,它会调用gameView.pause();方法。
这就是这种方法(gameview.pause()):
public void pause() {
isPaused = true;
gameThread.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();
}
先手叫上家按下并锁定屏幕时,重新进入比赛,但不,再解锁它时, 。这就是线程无法启动的原因。
现在我想知道如何手动调用此方法?
你应该可以使用onPause()和onResume()。查看活动生命周期以获取更多信息。
onResume()和onPause()适用于我,但只有当按下主页按钮并重新进入应用程序 – user2410644
@ user2410644 - 我认为我们需要更多关于您使用的框架的信息。它是用纯Android编写还是使用库来处理事情? – OrhanC1
纯粹的Android,要添加一些信息到我原来的帖子 – user2410644
当游戏结冰时添加任何logcat。你怎么画? Canvas或OpenGL以及如何处理暂停/恢复。 –
没有logcat!这是奇怪的部分。在SurfaceView的画布上绘制,这就是游戏线程的作用。 – user2410644