我正在开发一个具有大量高分辨率图形的应用程序。它在我的平板电脑上运行良好。但是,当我在智能手机上运行它时,我会出现内存不足异常。如果我取出一些图形,它工作正常。
有没有办法检测我有多少可用内存?然后,如果内存不足,我就会知道不要使用所有图形。
我正在开发一个具有大量高分辨率图形的应用程序。它在我的平板电脑上运行良好。但是,当我在智能手机上运行它时,我会出现内存不足异常。如果我取出一些图形,它工作正常。
有没有办法检测我有多少可用内存?然后,如果内存不足,我就会知道不要使用所有图形。
看看你的 LogCat,它会在某些时候向你显示有多少可用内存(只需应用一个过滤器,这样你就可以得到适用于你的应用程序的消息)
下面的方法将内存统计信息写入日志:
private static void dumpMemoryStateToLog() {
double heapSize = Runtime.getRuntime().totalMemory();
double heapRemaining = Runtime.getRuntime().freeMemory();
double nativeUsage = Debug.getNativeHeapAllocatedSize();
long maxMemory = Runtime.getRuntime().maxMemory();
double heapUsage = heapSize - heapRemaining;
double usedMemoryRatio = (heapUsage + nativeUsage) / maxMemory;
String msgFormat = "Memory state: max: %,d, heap: %,d, native usage: %,d, used memory: %,d%%";
int usedMemoryInPercents = (int) (usedMemoryRatio * 100);
Log.d(LOG_TAG, String.format(msgFormat, maxMemory, (int) heapUsage, (int) nativeUsage, usedMemoryInPercents));
}
设备 RAM 无关紧要。进程的可用内存很重要。
要找出您的应用程序的内存类别,请在 ActivityManager 上调用 getMemoryClass() - 这基本上会返回您的进程的可用 RAM 量(以 MB 为单位)。