Android 图像占用了太多的堆空间

Android 图像占用了太多的堆空间,android,image,memory,bitmap,heap,Android,Image,Memory,Bitmap,Heap,我遇到了一个奇怪的问题——我正在制作一个android游戏,发现每隔几秒钟就有一次延迟,当我注意到垃圾收集器每隔几秒钟就会被调用50-150毫秒一次时,我检查了日志 我用一张背景图片(150kb)启动我的标题屏幕活动时,将这个问题缩减到了图片上——我收到的消息是: 4%免费(8009k/8259k) 将堆增加到9.012MB GC_并发释放1kb(9178k/9479k) 这对于一个图像和三个按钮来说是一个很大的堆空间。当我删除映像时,没有收到任何警告或消息(不确定如何在堆空间上强制输出,但我希

我遇到了一个奇怪的问题——我正在制作一个android游戏,发现每隔几秒钟就有一次延迟,当我注意到垃圾收集器每隔几秒钟就会被调用50-150毫秒一次时,我检查了日志

我用一张背景图片(150kb)启动我的标题屏幕活动时,将这个问题缩减到了图片上——我收到的消息是:

4%免费(8009k/8259k) 将堆增加到9.012MB GC_并发释放1kb(9178k/9479k)

这对于一个图像和三个按钮来说是一个很大的堆空间。当我删除映像时,没有收到任何警告或消息(不确定如何在堆空间上强制输出,但我希望它处于正常级别)

活动图像的代码并不令人兴奋,因为它只是一个标题屏幕,但是:

    <ImageView
    android:id="@+id/backgroundImage1"
    android:contentDescription="Image"
    android:src="@drawable/openingscreen" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="top"
    />

当我启动实际的游戏时,堆大小再次增加(仅增加了几mb)——奇怪的是,当我没有标题屏幕时,主游戏的堆空间仍然是12 mb左右——所以我想可能图像包含了对其他所有内容的引用。虽然我尝试使用1像素大小的背景图像,但这并没有引起任何问题

其次,游戏线程内的图像代码:


mPlayer=Bitmap.createScaledBitmap(mPlayer,mCanvasWidth/15,mcanvashweight/8,true)

drawBitmap(mPlayer,xPosition,yPosition,null);


我确实听说过缩放位图会导致内存问题,但这并不意味着其他所有问题都会发生。

下面的公式告诉您一个图像需要多少堆空间:宽度x高度x 8字节。因此,一个全白色但尺寸较大的图像仍然会占用大量的堆空间。

是的,很多开发人员在开发过程中都遇到过这种情况

我要求您做的是彻底研究检查这个堆到底是什么,垃圾收集器如何处理它,如何有效地使用甚至缩放位图

你可以先看一下这个视频

接下来在android开发者网站上,详细介绍一下


最后也是最后一件事开始养成使用MAT()的习惯,这里有教程,有很多关于如何使用它的博客,并找出应用程序内存被剥夺的位置和原因。只需更新,我就发现了代码中的主要问题,并设法使其顺利运行,我怀疑其他人会愚蠢到犯同样的错误,但我会发布我的解决方案以防万一

在游戏的每一次迭代中,我都会重新调整我的图片大小,但不知怎么的,我没有意识到我把代码放在了里面,对它进行了更改,所以它在一开始就重新调整了它们的大小,就是这样。但事实就是这样,我怀疑这个解决方案对任何人都有帮助,但也许有一天它会的


凯文。

嗨,谢谢你的帮助!实际上我已经看过谷歌视频了,它非常有用!我还要调查其他的事情。但有一件事,你不同意问题是什么,是缩放、图像大小还是无关的内存泄漏?还是你更详细地说明了我可以用来诊断的工具?谢谢。我实际上是在陈述你可以用来破解它的工具。在这两者之间,你能找出总可用堆是什么吗?我相信这不是图像大小造成的(特别是因为它只有150kb)