Android 使用安卓果冻豆的Nexus7内存消耗非常高

Android 使用安卓果冻豆的Nexus7内存消耗非常高,android,android-4.2-jelly-bean,Android,Android 4.2 Jelly Bean,我有一个非常消耗内存的应用程序——处理大型位图。我已经使用处理此类位图的众所周知的技术对应用程序进行了优化(请不要在答案中提供教程链接…),这样它就可以正常运行,不会出现任何OutOfMemoryError异常,但仅在运行HC和ICS的设备上,在Jelly Bean上,同一应用程序的内存消耗几乎高出80%,这导致了糟糕的用户体验,应用程序是滞后和缓慢的 我准备了一个简单的测试,在Eclipse中使用模板创建了最简单的Android应用程序;该应用程序只有一个带有背景位图(1280 x 800)的

我有一个非常消耗内存的应用程序——处理大型位图。我已经使用处理此类位图的众所周知的技术对应用程序进行了优化(请不要在答案中提供教程链接…),这样它就可以正常运行,不会出现任何
OutOfMemoryError
异常,但仅在运行HC和ICS的设备上,在Jelly Bean上,同一应用程序的内存消耗几乎高出80%,这导致了糟糕的用户体验,应用程序是滞后和缓慢的

我准备了一个简单的测试,在Eclipse中使用模板创建了最简单的Android应用程序;该应用程序只有一个带有背景位图(1280 x 800)的活动。在安卓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
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
在具有JellyBean 4.2.1的Nexus 7上,它分配:

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
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
01-23 12:13:49.740:D/dalvikvm(23815):全部释放84K,4%释放7464K/7700K,暂停18ms,总计18ms
01-23 12:13:49.750:I/dalvikvm堆(23815):为4096016字节分配将堆(frag大小写)增长到11.338MB
01-23 12:13:49.770:D/dalvikvm(23815):释放1K的所有元素的GC,3%的自由元素11463K/11704K,暂停23ms,总计23ms

01-23 12:13:49.800:D/dalvikvm(23815):GC_我遇到了同样的问题-不幸的是,我怀疑这是由于最新版本的android将尝试尽可能多地使用3d加速器造成的-他们将复制您的图像并将其传递到3d加速器,然后用于渲染用户看到的实际像素。这就是为什么您会看到更高的内存消耗

至于对此能做些什么——不幸的是,做得不多。这种更高的内存使用率导致了总体上更平滑的UI(这是ProjectButter,它出现在android 4.1中)。如果您已经阅读过各种教程,比如谷歌,那么我所能建议的就是尝试打开清单的应用程序元素——这对我来说是有效的


此外,根据应用程序的工作方式,还可以回收位图。来自谷歌的解释。

使用果冻豆,用户界面的平滑度得到了改善。这可能是通过双重缓冲某些图像和/或显示区域来实现的吗?查看目标API设置为15的
位图
文档,两组方法会变浅灰色,这可能会影响内存使用:和。也许其中一个在平台更新中将其默认值从false切换为true?