由於Android系統的硬件資源是至關有限的,並且分配給一個應用的資源更爲有限,尤爲是內存。當應用忽然申請的內存大於容許的最大值的時候,就會出現OOM。java
若是想要獲取App的內存使用狀況,可使用如下方法:android
final int M = 1024 * 1024; final Runtime runtime = Runtime.getRuntime(); Log.i("Memory", "最大可用內存:" + runtime.maxMemory() / M + "M"); Log.i("Memory", "當前可用內存:" + runtime.totalMemory() / M + "M"); Log.i("Memory", "當前空閒內存:" + runtime.freeMemory() / M + "M"); Log.i("Memory", "當前已使用內存:" + (runtime.totalMemory() - runtime.freeMemory()) / M + "M");
下面簡單說一下每一個函數的做用:函數
1)maxMemory()測試
該函數用於獲取系統分配給JVM的最大可用內存(其實就是Java Heap),好比說使用如下Java命令啓動Java程序:ui
java -Xms64m -Xmx1024m App01
final long usedMemory = totalMemory() - freeMemory();
maxMemory限制了當前應用可以使用的最大內存值,而最大內存值基本上就決定了OOM出現的機率,目前可以修改最大內存值的方式就是,在Manifest裏面添加Application標籤:spa
android:largeHeap="true"
此時再測試一下,上面的代碼,就基本上能夠看到,最大內存值變大了。code
具體的其餘避免OOM的方式,目前很少贅述,寫本文也是由於在正常使用時發現,即便使用了了解的避免OOM的方式時但仍是沒法避免OOM,只能採起修改一些應用配置信息來避免OOM。xml