【问题标题】:Determining available heap space for Activity (preventing OutOfMemoryException)确定 Activity 的可用堆空间(防止 OutOfMemoryException)
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多