2012-04-06 114 views
0

我不是很確定如何保留在Android上的OpenGL ES應用程序中初始化的所有變量。我的應用程序初始化速度很慢,如果我不保存初始化變量,則每當我關閉並再次打開屏幕,或者按主頁鍵並返回到應用程序時,所有初始操作都會重新開始,並且這會導致遊戲迴歸緩慢,並回到遊戲的第一個狀態。 如何將應用程序狀態保留回去,而不必在應用程序放在後臺時再次初始化所有內容?我必須修改onSaveInstanceState函數嗎?在Android上保留遊戲狀態OpenGL ES應用程序

編輯:我想的是,應用程序不重新加載的背景下,並返回到持續時間不一樣,如果它是第一個發起

+0

請解釋_state_表示的意思。 GL上下文?有些狀態可以通過資產重新創建?臨時的遊戲狀態? – 2012-04-06 11:12:57

+0

我在這個問題上解釋過。我想要的是,只要返回到已經初始化的應用程序實例就不會永久使用,例如,如果我在屏幕上關閉,就像幾乎所有的Android遊戲一樣。 – WaLi 2012-04-06 11:51:06

回答

1

您需要的onSaveInstanceState使用和onRestoreInstanceState保存和加載變量,

我覺得Saving Android Activity state using Save Instance State是你所需要的

+0

這是爲了保存「狀態」,我的意思是,用戶在哪裏。但是我不想在每次屏幕熄滅時都加載gontext – WaLi 2012-04-06 13:28:06

1

我還是不真的理解你的問題。無論如何:你將沒有其他選擇,取決於拋棄的狀態。正如我上面的評論,至少有3種類型的狀態:能夠從資產中重新

  1. (遊戲)的狀態。
  2. (遊戲)狀態,表示當前用戶視圖(請參閱@AndrewWilkinson的回答)
  3. OpenGL上下文。

看一看Activity's lifecycle。當進程沒有被踢出內存時,狀態1和2被保存,你不必擔心。 糟糕的是,你不知道,所以你需要準備應用程序從被踢出內存和後來重新創建。所以你需要在任何時候保持狀態2。

對於狀態3:在每次調用GLSurfaceView.Renderer.onSurfaceCreated時,都可以確定不再有OpenGL上下文。您需要上傳所有需要再次顯示的內容。設置preserve flag可能會有所幫助,但您無法確定。

如果加載時間過長,請考慮顯示一個簡單的暫停屏幕,不需要太長的加載時間並保持用戶滿意。考慮以更懶惰的方式做東西,s.t.一些內容按需而不是熱切地加載。