【发布时间】:2011-08-06 18:25:59
【问题描述】:
我已经阅读了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 似乎暗示没有比这更好的方法了?
我知道使用更少的内存是一件好事,我也是。我很想知道如何防御性地编码,在这里。等待异常知道您的内存不足似乎很奇怪。
谢谢!
【问题讨论】:
标签: android