我有一個使用OpenGL的遊戲。我已經構建了大部分示例,具有主線程,呈現器線程(GLSurfaceView.Renderer)並添加了GameLogic線程。遊戲執行時,一切似乎都完美無缺。當按下back並且onPause()被觸發時,我也會觸發GLSurfaceView()的onPause,但是我在那時發生了「崩潰」。以下是MainActivity的onPause:調用GLSurfaceView.onPause()後活動暫停超時()
@Override
protected void onPause() {
Log.d("Main", "Pre- Super onPause");
super.onPause();
Log.d("Main", "Post- Super onPause");
mGSGLView.onPause();
Log.d("Main", "Post- GL onPause");
}
除了最後一個以外,每個日誌點都已到達。在logcat中,緊跟在「Post Super onPause」行之後,我得到一個Activity暫停超時。
我不會在GLSurfaceView類中重寫onPause ......並且據我所知,這段時間以來一直在爲我工作,但最近開始發生在我第二次嘗試完全黑屏時運行我的遊戲,直到最終獲得ANR。我的遊戲的95%本地運行。與San Angeles示例類似,Renderer調用onDraw,例如調用NativeDraw函數而不是java。對onSurfaceCreated,onSurfaceChanged也是如此,我也在邏輯線程中調用了原生的GameLogic方法(基本上所有被稱爲有線程睡眠和邏輯方法的方法)。
我希望我已經給了足夠的信息,請讓我知道如果有什麼我應該提供。
編輯 - 嗯......我已經縮小了問題的本地函數調用,我釋放了一些先前已經用malloc()分配給它們的內存的指針。我的代碼在那裏看起來不錯,但如果我省略了通話,一切正常,所以我的免費()通話必須破壞某些東西...