2012-07-23 440 views
3

我試圖在我的應用程序中正確使用OpenGL並在使用生命週期方法時遇到一些問題:onPause()onResume()GLSurfaceView生命週期方法onPause()和onResume()

documentation狀態:

活動生命週期

當活動被暫停,重新恢復了GLSurfaceView必須通知。 GLSurfaceView客戶端需要在活動暫停時調用onPause(),並在活動恢復時調用onResume()。這些調用允許GLSurfaceView暫停並恢復渲染線程,並允許GLSurfaceView釋放並重新創建OpenGL顯示。

所有我有點困惑,onPause()onResume()是,在整個Android系統的其餘部分,生命週期事件由系統(活動/片段),作爲所謂的第一次。在這裏,根據描述(包括onPause()onResume()中的詳細描述),似乎它們必須由開發人員手動調用。

沒有調用onPause()onResume()並沒有注意到一個問題,我一直在使用GLSurfaceView。然而,爲了打球(並且在恢復活動時減少可能的奇怪行爲的嫌疑人),我試圖按照文檔中所述添加它們。

它似乎然而,使用的onResume()導致NullPointerException拋出:

07-23 13:20:08.570: E/AndroidRuntime(20777): Caused by: java.lang.NullPointerException 
07-23 13:20:08.570: E/AndroidRuntime(20777): at android.opengl.GLSurfaceView.onResume(GLSurfaceView.java:544) 
07-23 13:20:08.570: E/AndroidRuntime(20777): at com.ActivityNameHere.onResume(ActivityNameHere.java:151) 

是否有一步我缺少註冊ActivityView

回答

4

onPause()onResume()仍然打破我的實現 - 但要公平他們不再崩潰做:

Documentation:

The following GLSurfaceView methods can only be called after setRenderer is called: 

getRenderMode() 
onPause() 
onResume() 
queueEvent(Runnable) 
requestRender() 
setRenderMode(int) 

通話setRenderer()在我的Activity.onResume()之前。

+1

來自setRenderer的文檔:「這個方法在GLSurfaceView的生命週期中應該只調用一次*。」你確定你做對了嗎?或者也許我錯過了一些東西。 – async 2014-03-16 14:41:50

相關問題