2012-03-29 44 views
0

問題是,一旦應用程序啓動,應用程序看起來會滯後一段時間(此時並不一致)。例如,當瀏覽菜單時,導航動畫將非常不連貫。然而,這種滯後通常只持續2-3秒。這個問題在玩家進入遊戲後的2-3秒內也會出現。Android Opengl ES 2應用程序最初啓動時出現延遲

我已經排除了GC作爲這種滯後的可能原因,因爲所有內容都是預先加載的,並且所有內存分配都會執行一次,當遊戲第一次加載並且任何時候玩家開始新一輪遊戲時。

我在運行Android 2.2的愛可視43上運行這些測試。該設備可以處理3D遊戲,並且我已經嘗試了幾個並且沒有這些遊戲滯後,所以它必定是我的代碼的問題。我在我的遊戲中使用3個線程,其中2個線程不是由我創建的(渲染線程和事件線程),第3個線程是遊戲更新線程。

而且這只是一個假設,但感覺就好像當它來繪製一個新的紋理(即以前沒有畫出一個),即使紋理與GLES20.glGenTexturesGLES20.glBindTextureGLUtils.texImage2D預裝遊戲只落後。

我可以根據需要提供來源。

+0

您是否嘗試過使用DDMS traceview進行分析? – Tim 2012-03-29 05:25:08

回答

0

聽起來像你可能在UI線程上做了很多工作,比如加載模型或紋理,這種類型的工作應該在其他地方完成。看看這裏的android開發者頁面,看看如何避免這種情況,尤其是標題爲「在UI線程中處理昂貴的操作」。 http://developer.android.com/resources/faq/commontasks.html#progressbar

在我目前的一個項目中,渲染一個有1200個頂點的茶壺,並且在閱讀文件後必須計算每個頂點法線,直到所有後臺工作完成後,我將有一個緩慢的應用程序幾秒鐘。

+0

加載的東西是在onSurfaceCreated函數和繪製線程中完成的,因此在UI線程中沒有加載。由於我需要GL對象加載紋理,所以在UI線程中加載紋理幾乎是不可能的(並且在加載紋理之後,我加載使用紋理的對象)。 – idunnololz 2012-04-02 15:58:48

+0

閱讀GLSurfaceView上的Android文檔後,http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html。看起來渲染器確實有自己的線程,但是我在構造函數中完成了繁重的工作,回頭看起來似乎不是一個好主意。 – MyReliableSchreck 2012-04-02 18:46:27