2016-01-05 38 views
1

我有一個新手問題。這是Android studio中內存選項卡的屏幕截圖。有人可以提供一些有關可接受內存消耗的近似數據嗎?是否有限制最大內存使用的界限?我應該擔心分配的內存是否在11Mb左右?可接受的libgdx內存消耗

enter image description here

+0

大多數遊戲將使用超過11mb的方式,所以你應該沒問題。在開發過程中記住可用內存的數量。如果你需要它,請求一個大堆(我相信在androidmanifest中)也會給你更多的內存。 – JonasCz

+0

16MB是一些真正舊設備的限制。可能不在任何少於三四歲的設備上。該限制僅適用於Java堆。本機內存不受每個應用的限制。遊戲中絕大多數內存可能來自你的紋理和像素圖的本地內存。大多數Java內存使用可能來自您的代碼(類,枚舉,原語),也許聽起來像是。如果你使用Proguard,你可能會看到它會下降很多,因爲你沒有使用所有的Libgdx類。 – Tenfour04

+0

感謝您的意見。我注意到在某些設備上分配的內存較低。這是爲什麼?在一臺設備上,分配的內存僅爲4Mb,啓動後應用程序崩潰,屏幕上未顯示錯誤消息。分配的內存是否可能降低並導致崩潰?這個問題可以在這裏找到http://stackoverflow.com/questions/34616201/libgdx-game-crashes-on-some-devices – brumbrum

回答

2

它似乎像你沒有太多的可用內存,並且分配的內存應該更多。我遇到了同樣的問題,這是因爲我沒有正確關閉遊標,也是因爲我沒有回收位圖存儲器,而是從文件中獲取圖形,而不是從可繪製資源中獲取圖形。你可以告訴你有多少內存可用於你的應用程序:

ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE); 
    int memoryClass = am.getMemoryClass(); 
    Runtime rt= Runtime.getRuntime(); 
    long maxMemory = rt.maxMemory(); 
    long freeMemory = rt.freeMemory(); 
    Log.d("Memory Available", "memoryClass:" + Integer.toString(memoryClass)); 
    Log.d("Max Memory Available", "max memory:" + Long.toString(maxMemory)); 
    Log.d("Free Memory", "Free Memory: " + Long.toString(freeMemory)); 
+0

謝謝你停下來。我注意到,當應用程序在不同的設備上運行時,分配的內存會有所不同。你有沒有機會知道爲什麼會發生這種情況? – brumbrum

+0

@ krompir2 - 對於我的應用程序,分配的內存各不相同,具體取決於設備。 Note 3比Nexus 7表咀嚼了3倍的內存分配。 –