0

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

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

刚接触 android 并试图弄清楚这一点,我不希望我的应用程序用户弄乱他们的手机,因为我占用了整个 HEAP 内存。

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

4

1 回答 1

0

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

一种替代方法是在运行时动态检查可用空间,并根据分析完成一些工作。有几种方法可以检查 Android 中的可用内存空间,但我更喜欢像这样使用getMemoryClass(我从Square 的 Picasso 库中复制了代码)

//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);
}
于 2013-08-22T02:59:39.913 回答