我有一个非常消耗内存的应用程序 - 处理大型位图。我已经使用众所周知的技术调整了应用程序来处理此类位图(请不要在答案中提供教程链接......),以便它可以正常运行,没有任何OutOfMemoryError
异常,但仅在运行 HC 和 ICS 的设备上,在 Jelly Bean 上相同的应用程序有内存消耗增加了近 80%,这导致糟糕的用户体验,应用程序滞后且缓慢。
我准备了一个简单的测试,只是在Eclipse中使用模板创建了最简单的Android应用;该应用程序只有一个带有背景位图 (1280 x 800) 的活动。在装有 Android 3.1 (Asus A500) 的设备上,它分配:
01-23 12:28:02.402: D/dalvikvm(31706): GC_FOR_ALLOC freed 65K, 4% free 6559K/6787K, paused 17ms
01-23 12:28:02.402: I/dalvikvm-heap(31706): Grow heap (frag case) to 10.355MB for 4096016-byte allocation
01-23 12:28:02.432: D/dalvikvm(31706): GC_CONCURRENT freed 1K, 3% free 10558K/10823K, paused 1ms+2ms
在带有 JellyBean 4.2.1 的 Nexus 7 上,它分配:
01-23 12:13:49.740: D/dalvikvm(23815): GC_FOR_ALLOC freed 84K, 4% free 7464K/7700K, paused 18ms, total 18ms
01-23 12:13:49.750: I/dalvikvm-heap(23815): Grow heap (frag case) to 11.338MB for 4096016-byte allocation
01-23 12:13:49.770: D/dalvikvm(23815): GC_FOR_ALLOC freed 1K, 3% free 11463K/11704K, paused 23ms, total 23ms
01-23 12:13:49.800: D/dalvikvm(23815): GC_CONCURRENT freed <1K, 3% free 11463K/11704K, paused 2ms+2ms, total 23ms
01-23 12:13:49.900: D/dalvikvm(23815): GC_FOR_ALLOC freed <1K, 3% free 11463K/11704K, paused 12ms, total 13ms
01-23 12:13:49.920: I/dalvikvm-heap(23815): Grow heap (frag case) to 18.259MB for 7259056-byte allocation
01-23 12:13:49.940: D/dalvikvm(23815): GC_FOR_ALLOC freed 0K, 2% free 18552K/18796K, paused 16ms, total 16ms
01-23 12:13:49.960: D/dalvikvm(23815): GC_CONCURRENT freed <1K, 2% free 18552K/18796K, paused 3ms+2ms, total 17ms
所以我有两个问题:
1、为什么应用程序在其主活动的背景上只使用一张位图时会消耗这么多内存?
2、为什么带有JellyBean的设备在运行相同的应用程序时内存消耗要高出近80%?
编辑1:
所有设备都具有相同的屏幕分辨率:1280 x 800 像素