当安卓系统出现OutOfMemory异常时,是什么原因引起的?

4
我正在阅读有关Android中的OutOfMemory错误,当Android内存耗尽时会发生此错误。我想知道如果我的应用程序消耗了一些x MB的内存,那么它会产生OutOfMemory错误吗?Android是否根据设备和总物理内存为每个应用程序分配特定数量的内存?
例如,我有一个安装了2GB RAM的设备,500MB被操作系统占用,500 MB被其他应用程序占用。现在我的应用程序有1048MB的内存可用于运行。所以,在这种特殊情况下,系统何时会出现OutOfMemory错误?

1
这是一个非常好的问题。我有时会在我的应用程序中(仅限两三个应用程序)收到Google报告的内存不足异常。但我不知道为什么,因为我没有使用重量级UI或其他工作。而重要的问题是:如何处理这个问题...? - Opiatefuchs
http://stackoverflow.com/questions/30068676/how-to-prevent-reloading-of-images-in-listview-with-custom-adapter-when-refresh/30068976#30068976 - Yogendra
@Yogandra.....非常有趣。有时候我想知道为什么我会错过这样的事情.... - Opiatefuchs
感谢您,@Opiatefuchs。 - Yogendra
3个回答

1
每个应用程序都有一定的内存限制可用于堆分配。它因不同手机而异(您也可以在清单中增加它)。本答案 对此进行了详细说明,提供了某些型号和设置的具体数字。
至于如何确定它:
引用块中说到:

它往往更基于屏幕分辨率,因为更高分辨率的屏幕 tend to want to manipulate larger bitmaps,所以 Google makes heap size recommendations that, hopefully, device manufacturers will abide by. CommonsWare


0

您所寻找的最好由谷歌自己描述在这里


要了解可以使用多少内存,您可以执行以下操作:

ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
int memoryClass = manager.getMemoryClass();
Log.v("onCreate", "memoryClass:" + Integer.toString(memoryClass));

0

你的OutOfMemory异常是由于堆大小引起的,而不是RAM。

为了维护一个功能性的多任务环境,Android为每个应用程序设置了堆大小的硬限制。确切的堆大小限制因设备可用的总RAM量而异。如果您的应用程序已达到堆容量并尝试分配更多内存,则会收到OutOfMemoryError。

这里有一个有用的链接:https://developer.android.com/training/articles/memory.html

希望能对你有所帮助 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接