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

7
我已阅读了如何在Android中发现应用程序的内存使用情况?和许多其他答案,但仍无法完全掌握这一点......

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

从上面链接的答案中,我得出:

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

您可以参考此链接..这是关于您正在面临的相同问题的完整研究。 OOMRESEACH


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接