2011-06-12 82 views
2

我有一個使用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()分配給它們的內存的指針。我的代碼在那裏看起來不錯,但如果我省略了通話,一切正常,所以我的免費()通話必須破壞某些東西...

回答

0

好吧,我只是自己回答這個問題,因爲解決方案如此特定我自己的代碼,沒有人能夠。

如果您在本機端分配了內存,請注意不要將其釋放,直到您確定沒有其他代碼嘗試訪問它爲止。