Android 堆外内存管理

Android 堆外内存管理,android,memory,Android,Memory,我正在为android开发一个应用程序,因为我们有很多图形,我们使用了很多内存 我监控内存堆大小及其大约3-4MB,当我做一些需要更多内存的事情时(然后返回到3),会看到5Mb。这没什么大不了的,但是其他一些事情是在堆内存之外处理的,比如加载可提取的内容 例如,如果我在eclipse外部运行ddms工具,并转到sysinfo,我会看到我的应用程序在Droid上占用20Mb,在G1上占用12 MB,但这两个应用程序的堆大小相同,因为数据相同,但图像不同 因此,问题是: 我如何知道是什么将内存带出了

我正在为android开发一个应用程序,因为我们有很多图形,我们使用了很多内存

我监控内存堆大小及其大约3-4MB,当我做一些需要更多内存的事情时(然后返回到3),会看到5Mb。这没什么大不了的,但是其他一些事情是在堆内存之外处理的,比如加载可提取的内容

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

因此,问题是: 我如何知道是什么将内存带出了堆内存? 还有什么东西会占用堆内存之外的内存?复杂布局(大树)?动画

谢谢


Daniel

一个明显的候选对象是偏离屏幕的位图(android的双缓冲?),因为屏幕大小是droid上像素数的4倍左右。

位图对象占用大量内存

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

是的,所有类型的对象都使用内存,如线性布局、图像视图等。。。如果您正在创建和销毁这些对象中的许多对象,例如,当您滚动/翻页图像时,将出现内存泄漏。gc()不能像我们希望的那样快速处理所谓的短期对象

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

参考:


如果你的应用程序的内存达到20MB,可能是因为BitmapFactory正在尝试解码下一幅图像。

谢谢,我正在寻找一种跟踪堆外内存的方法。