当前位置: 首页 > 知识库问答 >
问题:

Android -增长堆(碎片情况)-字节分配..不加载任何位图

厉念
2023-03-14

当应用程序从闪屏加载到主页时,就会出现这种情况。它只发生在设备上,而不是模拟器上:

05-17 08:10:16.627: I/dalvikvm-heap(14021): Grow heap (frag case) to 20.580MB for     2424256-byte allocation
05-17 08:10:16.666: D/dalvikvm(14021): GC_FOR_ALLOC freed 1K, 3% free 21000K/21511K, paused 21ms
05-17 08:10:16.697: D/dalvikvm(14021): GC_CONCURRENT freed 116K, 3% free 20885K/21511K, paused 2ms+2ms
05-17 08:10:16.720: D/dalvikvm(14021): GC_FOR_ALLOC freed 44K, 4% free 20841K/21511K, paused 10ms
05-17 08:10:16.728: I/dalvikvm-heap(14021): Grow heap (frag case) to 24.533MB for 4310896-byte allocation

我使用Ecplise MAT -字节分配解析- Android。Graphics . Bitmap $预加载的图像...

我使用的设备是谷歌Nexus Prime,Android 4.0

有人遇到过同样的吗?有人能扔些专业知识吗......

共有2个答案

陈项禹
2023-03-14

您可能正在尝试解码一个非常大的位图,这会导致OutOfMemory异常。这意味着您尝试实现的操作超出了设备上每个应用程序允许的VM预算,就堆内存消耗而言(在您的设备上似乎是24 MB,在您的模拟器上可能更多,这就是为什么它不会发生在那里!)。

尝试以2的因子采样您的位图,例如:

BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize = 2;
Bitmap b = BitmapFactory.decodeFile(pathToBitmap, o);
南门建章
2023-03-14

我也遇到过同样的问题,并找到了解决方案。

是否从资源加载位图?如果是这样,请尝试将它们放在相应的可绘制文件夹中,而不是将它们保存在“可绘制”或“可绘制的mdpi”中。

当你把你的图像资源放在普通的drawable文件夹中时,对系统来说就意味着drawable-mdpi。因此,具有高或超高dpi的设备(我认为Galaxy Nexus是超高的)将扩展该资源以匹配设备的dpi。

如果您的资源只有1个大小,请将它们放在绘图-nodpi中,它将按原样使用。但是,您的某些布局可能会受到此影响,因此我将某些图像保留在绘图文件夹中(如按钮图像等)并将背景和其他更大的资源移动到绘图-nodpi中。

希望这有帮助;)

 类似资料:
  • 我的应用程序有问题。我的活动由以下xml代码组成: 使用充气,插入包含images.png!这会导致堆增长(frag情况)。是否有一种方法可以减少或增加堆,并保持此设置? 这是在Mainactive中插入的布局: 谢啦!

  • 我有一个pageOffscreenPageLimit设置为1的ViewPager(共3页)。我用它为每页显示4个位图。位图是异步加载的,按比例缩小,以及所有这些东西,以避免OutOfMemory异常。我注意到由于GC导致的页面滚动出现了一些“停顿”,这里有一段日志: 堆大小保持在24MB并且不会增长。此外,在destroyItem中,我尝试释放ImageView,将drawables和回调设置为n

  • 我已经使用Android Studio 3个月了,其中一个应用程序已经变得相当大了。程序右下角指示的内存使用量表明,我分配的堆最大值为494M。 当我开始更改XML文件时,内存使用量很快达到上限,IDE崩溃,出现内存不足的错误,如下所示。 我曾尝试使用此方法来增加堆大小,但到目前为止没有任何效果。 我已经看了几十篇文章和其他关于如何增加堆大小的问题,但他们的答案都不起作用。无论我对VMOPTION

  • 在我的ES集群中,我有10个碎片和2个副本,有5个节点。我只是在集群中添加了一个新节点,它与集群同步了。状态为绿色,根据集群API,我们现在在集群中有6个活动数据节点。但是,当我选中`'http://localhost:9200/_cat/shards'时,没有为该节点分配碎片。因此,没有弹性查询指向这个新添加的节点。该节点的日志文件中没有什么特别之处: 对如何解决这个问题有什么特别的意见吗?

  • 问题:我已经启动了五个elasticsearch节点,但只有66,84%的数据在kibana中可用。当我用localhost检查集群运行状况时:9200/u cluster/health?pretty=true我得到了以下信息: 除kibana指数外,我所有的指数都是红色的。 小部分:

  • 我正在用Xamarin开发一个Android应用程序。我在从字流生成图像方面遇到了问题。BitmapFactory(似乎是最流行的解决方案)正在引发巨大的分配问题--Grow堆。