android内存管理堆外

时间:2010-01-15 18:13:02

标签: android memory

我正在开发一个Android应用程序,因为我们有很多图形,所以我们使用了大量的内存。

我监视内存堆大小及其大约3-4 Mb,当我执行需要更多内存的事情时(然后返回到3),我会监视5Mb。这不是什么大问题,但是在堆内存之外处理其他一些东西,比如加载drawables。

例如,如果我在eclipse之外运行ddms工具,并转到sysinfo,我看到我的应用程序在Droid上占用20Mb,在G1上占用12个,但两者的堆大小相同,因为数据是相同的但图像不同。

所以问题是: 我如何知道在堆内存之外占用内存的是什么? 还有什么东西会占用堆内存之外的内存?复杂的布局(大树)?动画?

由于

丹尼尔

2 个答案:

答案 0 :(得分:4)

位图对象占用大量内存

实施例。如果您的应用程序从网上下载10KB jpg并使用BitmapFactory将其解码为位图对象,位图对象需要大约30-100KB内存,具体取决于图像的分辨率。每个像素3字节(每种颜色1个字节)

是的,所有类型的对象都使用内存,如LinearLayouts,ImageViews等......如果你正在创建和销毁许多这些对象,例如。当您滚动/翻阅图像时,会出现内存泄漏。 gc()不像我们希望的那样快地处理所谓的短期对象。

*将视图对象的数量保持在稳定的水平**,并回收它们而不是销毁和创建新的视图对象。

参考:http://developer.android.com/resources/articles/track-mem.html

如果您的应用在内存中达到20MB,则可能是FC,因为BitmapFactory正在尝试解码下一张图片。

答案 1 :(得分:2)

一个显而易见的候选人当然是屏幕外的位图(Android的双缓冲?),因为屏幕尺寸在机器人上的像素数是这个数量的4倍。