2012-03-17 36 views
1

我製作了一個自上而下的遊戲,角色在一個關卡中移動。水平基本上是一個1600x2400 png。我無法將該png加載到內存中,所以我必須使用BitmapRegionDecoder在玩家在關卡中移動時將其加載到區塊中。當然這很糟糕,可能導致口吃。我想在後臺線程中加載下一個塊,但這意味着我在內存中有兩個塊:當前塊和下一個塊,這會導致OutOfMemoryException異常。爲什麼android將vm內存大小限制爲任意24或32 MB?

現在所有的設備至少有512 MB或RAM,爲什麼我們仍然對vm ram有那麼愚蠢的限制?谷歌專心告訴我們應該使用多少內存!讓我們來決定!現在我不得不吃更多的CPU週期,因爲我不能將所有東西加載到RAM中,更不用說我使用此BitmapRegionDecoder獲得的更糟糕的性能!

任何想法爲什麼谷歌這樣做,什麼時候會結束?這個決定背後的邏輯論據是什麼?

回答

2

a)512MB RAM並不意味着您的應用程序可以使用那麼多。可用內存仍然非常有限。所以我想它永遠不會結束。虛擬機獲得的數量可能會增加,但如果你想保持兼容,那麼你必須有效地進行編碼。 (例如分割圖像,不從一個巨大的圖像加載數據)

b)您可以使用JNI/NDK/C並自己管理內存,本地代碼沒有限制。

+0

我想關於分割圖像的想法並不是那麼好。這是由於不同設備的屏幕分辨率不同所致。我非常肯定,作者試圖讓遊戲在不同設備上看起來很相似,這意味着如果設備的屏幕分辨率比用戶看到的更多,而不是拉伸和模糊的小塊。因此,它是一個真正的困境,解碼區域,並獲得內存不足或分割,並在某些情況下獲得低質量的產品。而這款AOS虛擬機的內存限制真的很糟糕! – Stan 2013-07-08 07:00:45

+0

如果你有任意大的圖像,例如谷歌地圖,將圖片拆分成圖塊是一個好主意。你顯然需要做更多的事情來顯示它,就好像它是一個圖像一樣,但你獲得了圖像大小的完全獨立性。你可以從這個例子看出,如果你做得對,你沒有模糊的圖像。這只是加載單個圖像不容易。 – zapl 2013-07-08 12:48:23

+0

同意,我記住這一點,我的意思是還有很多工作要做。另一方面還有很多工作要做==更多的機會得到滯後/口吃等。 – Stan 2013-07-08 14:47:30

相關問題