我们正在开发一个大量使用图像(大小)的 Android 应用程序。我们的主屏幕有图像的“拼贴”。我们已经通过通常的机制调试了一系列“内存泄漏” ......但刚刚注意到我们setContentView
在 main中的调用Activity
导致了非常大的内存分配:
08-14 15:27:30.688: D/BEFORE setContentView PJK 6 CollageActivity(21845): debug.memory: 分配: 49.05MB of 192.00MB (19.22MB free)
08-14 15:27:31.049: D/AFTER setContentView PJK 7 CollageActivity(21845):debug.memory:已分配:64.68MB of 192.00MB(15.22MB 可用)
(这是取自 Nexus 4 设备)。
在上面喜欢的 SO 问题中,我们唯一没有尝试过的是生成不同比例的背景图像。这仅占 3,932,160 (= 1280 x 768 x 4) 字节的分配。
DDMS(和 MAT)显示位图分配很大:
有什么方法可以找出我们布局的哪一部分导致了如此大的分配(16,384,064 字节!)?(虽然我只是将图像重新缩放到那个大小,但这并没有帮助。)
编辑
再深入一点,我android:background
从以下内容中删除了可绘制对象LinearLayout
:
<LinearLayout
android:id="@+id/collage_activity_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg_collage"
android:orientation="horizontal" >
和内存分配时的距离!关于为什么 800 x 1280 背景(应该生成 800 x 1280 x 4= 4,096,000 字节图像)实际上生成 16MB 图像的任何想法?可能是因为 800(图像尺寸)和 768(屏幕尺寸)之间的差异吗?