当屏幕被锁定并解锁时,游戏会冻结

问题描述:

我刚刚写了一些小游戏,问题在于,每次我在游戏过程中锁定屏幕并在解锁之后,游戏就会冻结。我不知道为什么但它发生。当屏幕被锁定并解锁时,游戏会冻结

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

有没有像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(); 
     } 

先手叫上家按下并锁定屏幕时,重新进入比赛,但,再解锁它时, 。这就是线程无法启动的原因。

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

+0

当游戏结冰时添加任何logcat。你怎么画? Canvas或OpenGL以及如何处理暂停/恢复。 –

+0

没有logcat!这是奇怪的部分。在SurfaceView的画布上绘制,这就是游戏线程的作用。 – user2410644

你应该可以使用onPause()和onResume()。查看活动生命周期以获取更多信息。

+0

onResume()和onPause()适用于我,但只有当按下主页按钮并重新进入应用程序 – user2410644

+0

@ user2410644 - 我认为我们需要更多关于您使用的框架的信息。它是用纯Android编写还是使用库来处理事情? – OrhanC1

+0

纯粹的Android,要添加一些信息到我原来的帖子 – user2410644