确定Activity的可用堆空间(防止OutOfMemoryException)

时间:2011-04-16 04:22:19

标签: android

我已经阅读了How do I discover memory usage of my application in Android?以及其他一些答案,但不能完全解决这个问题......

我有一个Activity,它将文件从外部存储器加载到内存中,并在内存中进行一些解析/操作/等操作。在我加载它之前,我想猜测这样做是否会导致OutOfMemoryException并使Activity崩溃(我知道确切的答案是不可能的,估计总比没有好。)

从上面提到的答案中,我提出了:

ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);
MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);

int pid [] = {android.os.Process.myPid()};

android.os.Debug.MemoryInfo[] mi = activityManager.getProcessMemoryInfo(pid);

// calculate total_bytes_used using mi...

long available_bytes = activityManager.getMemoryClass()*1024*1024 - total_bytes_used;

所以,问题:

1)我疯了吗?
2)如何从MemoryInfo对象中总计值来估计活动/任务的堆使用情况? (上面的链接给出了pss / private-dirty / shared-dirty的概述,但没有足够的信息来猜测如何进行总计。)
3)Debug是否始终存在或仅在调试时?
4)有更聪明的方法吗?

像这样的答案:Two questions about max heap sizes and available memory in android似乎暗示没有比这更好的方法了吗?

我知道使用更少的内存是件好事,而我是。我很想知道如何在防守方面进行编码。等待异常知道你的内存不足,似乎很奇怪。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以参考此链接。对您面临的同一问题进行全面研究。 OOMRESEACH