按需分配HEAP内存

时间:2013-08-22 02:11:48

标签: android performance heap-memory

我有一个Android应用程序,我在其中调用以获取大量数据,我收到OutOfMemoryException错误,所以我调查并找到了解决方案:

添加android:largeHeap = true,这很好用,我不再犯错误但是我也读到这不好,因为它可能会阻止用户的其他应用。有没有办法分配应用程序可以使用的固定数量的HEAP?在使用logcat进行调试的时候,我发现它并不是我需要额外提供的基础或默认HEAP空间,但它足够大,可以导致OutOfMemoryException

Android的新手并试图解决这个问题,我不希望我的应用程序用户弄乱他们的手机,因为我拿走了整个HEAP内存。

PS:该应用适用于Android 4.0及更高版本的手机。

1 个答案:

答案 0 :(得分:0)

不幸的是,没有办法为您的应用分配固定数量的HEAP空间,并且分配的堆空间可能因设备而异。

一种替代方法是在运行时动态检查可用空间,并根据分析执行某项工作。有几种方法可以检查Android中的可用内存空间,但我更喜欢使用这样的getMemoryClass。 (我复制了Square's Picasso library

中的代码
//memory class is MB units.
ActivityManager am = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
boolean largeHeap = (context.getApplicationInfo().flags & FLAG_LARGE_HEAP) != 0;

int memoryClass = am.getMemoryClass();
if (largeHeap && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  memoryClass = ActivityManagerHoneycomb.getLargeMemoryClass(am);
}