【发布时间】:2016-01-18 07:07:28
【问题描述】:
我想进一步了解out of memory。我知道它主要导致试图操作的位图和大型对象。无论如何,有一种情况会出现这个错误,虽然我没有图像或其他任何东西,只有简单的 textViews 和手机内存就像 12% 一样免费。所以我知道我的应用程序使用少量的 kb-s 作为内存来分配,但我想知道该内存是否也对 ram 有任何作用? android中的内存不足错误也会因为RAM内存不足吗?
【问题讨论】:
我想进一步了解out of memory。我知道它主要导致试图操作的位图和大型对象。无论如何,有一种情况会出现这个错误,虽然我没有图像或其他任何东西,只有简单的 textViews 和手机内存就像 12% 一样免费。所以我知道我的应用程序使用少量的 kb-s 作为内存来分配,但我想知道该内存是否也对 ram 有任何作用? android中的内存不足错误也会因为RAM内存不足吗?
【问题讨论】:
网络上有大量资源,只需谷歌即可。一个好的起点是http://developer.android.com/training/articles/memory.html
设备的 RAM 不会直接影响您应用的内存,真正的问题是所谓的 堆。把它想象成你的应用程序允许使用的 RAM 的一小部分(还有更多,但现在应该足够了)。
所有 java 对象都在堆上分配,即保存。如果您正在创建一个新对象,堆将始终尝试删除未使用的东西,但如果它不能(因为您仍在使用所有对象)它将尝试增长。如果堆无法进一步增长,则会出现OutOfMemoryError。
你看,不仅仅是位图会增加你的内存消耗,而且基本上任何东西。特别大的StringBuffers 也可能是个问题。
但是,位图通常是原因。如果您正在使用例如ImageView 或只是设置 View 的背景图像,它将在内部使用 Bitmap。
如果您真的没有在您的应用程序中使用任何大文件或位图,那么您很有可能遇到内存泄漏。要了解有关这些(以及如何发现它们)的更多信息,请查看https://corner.squareup.com/2015/05/leak-canary.html
【讨论】: