我有一个Android应用程序,我在其中调用以获取大量数据,我收到OutOfMemoryException
错误,所以我调查并找到了解决方案:
添加android:largeHeap = true
,这很好用,我不再犯错误但是我也读到这不好,因为它可能会阻止用户的其他应用。有没有办法分配应用程序可以使用的固定数量的HEAP?在使用logcat进行调试的时候,我发现它并不是我需要额外提供的基础或默认HEAP空间,但它足够大,可以导致OutOfMemoryException
。
Android的新手并试图解决这个问题,我不希望我的应用程序用户弄乱他们的手机,因为我拿走了整个HEAP内存。
PS:该应用适用于Android 4.0及更高版本的手机。
答案 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);
}