gpt4 book ai didi

android - 使用 Android Jelly Bean 的 Nexus 7 内存消耗非常高

转载 作者:太空狗 更新时间:2023-10-29 14:23:36 24 4
gpt4 key购买 nike

我有一个非常消耗内存的应用程序 - 处理大型位图。我已经使用处理此类位图的众所周知的技术调整了应用程序(请不要在答案中的教程链接......)以便它运行良好而没有任何 OutOfMemoryError 异常,但仅在运行 HC 和 ICS 的设备上,在 Jelly Bean 上,相同的应用程序内存消耗高出近 80%,这导致糟糕的用户体验,应用程序滞后且缓慢。

我准备了一个简单的测试,只是在Eclipse中使用模板创建了最简单的Android应用程序;该应用程序只有一个带有背景位图 (1280 x 800) 的 Activity 。在 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、为什么应用程序在其主要 Activity 的背景上仅使用一张位图时会消耗这么多内存?

2,为什么运行相同的应用程序时,使用 JellyBean 的设备内存消耗高出近 80%?

编辑 1:

所有设备都具有相同的屏幕分辨率:1280 x 800 像素

最佳答案

我遇到了同样的事情 - 不幸的是,我怀疑这是由于最新版本的 android 将尽可能多地尝试使用 3d 加速器 - 他们会复制你的图像并将其传递到然后 3d 加速器用于渲染用户看到的实际像素。这就是您看到更高内存消耗的原因。

至于可以做些什么 - 不幸的是不多。这种更高的内存使用量导致整体更流畅的 UI(这是 project butter,它出现在 android 4.1 中)。如果您已经查看过各种教程,例如 googles displaying bitmaps efficiently那么我只能建议尝试打开 largeHeap在 list 的应用程序元素中 - 这对我有用。

另外,根据您的应用程序的工作方式,回收位图是可能的。 This DevBytes video来自谷歌解释了如何。

关于android - 使用 Android Jelly Bean 的 Nexus 7 内存消耗非常高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14478881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com