2014-04-19 53 views
0

我用下面的代碼段在我的onCreate()方法:糖果粉碎內存分配 - 大堆?

 ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
     Log.d("test", "Memory Class=" + am.getMemoryClass()); 
     int maxMB = (int) ((Runtime.getRuntime().maxMemory()/1024)/1024); 
     Log.d("test", "Memory maxMB=" + maxMB); 
     int totalMB = (int) ((Runtime.getRuntime().totalMemory()/1024)/1024); 
     Log.d("test", "Memory totalMB=" + totalMB); 

這導致: 內存類:96MB, 最大內存:96MB, 總內存:15MB,

然後我安裝了一個應用程序,顯示正在運行的應用程序正在使用的內存,我發現Candy Crush使用了175 MB,這比我獲得的最大值(96MB)大得多。這怎麼可能?這是否意味着他們在清單中使用「largeHeap = true」?我所知道的是,Android官方網站嚴格禁止開發者使用此標誌。

回答

2

然後,我安裝了一個應用程序,顯示正在運行的應用程序正在使用的內存,我發現Candy Crush使用了比我獲得的最大值(96MB)大的175 MB。

該應用程序作者的賠率正確are not very good。我將使用Hackborn女士描述的工具和this Android Developers Blog post

這怎麼可能?這是否意味着他們在清單中使用「largeHeap = true」?

這是一種可能性。他們的應用程序也可能不是基於Java的遊戲引擎 - 遊戲引擎通常使用NDK實現,而NDK分配不受Dalvik堆限制的限制。