我遇到了一个奇怪的问题 - 我正在制作一个 android 游戏,每隔几秒就会注意到一次延迟,并在我注意到垃圾收集器每隔几秒被调用一次 50-150 毫秒时检查日志。
当我使用一个背景图像(150kb)启动我的标题屏幕活动时,我已经将这个问题缩小到图像 - 我得到的消息是:
4% 空闲 (8009k/8259k) 将堆增长到 9.012MB GC_CONCURRENT 释放 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 像素的背景图像,但这没有引起任何问题。
其次,gameThread里面的图片代码:
mPlayer = Bitmap.createScaledBitmap(mPlayer, mCanvasWidth / 15, mCanvasHeight / 8, true);
canvas.drawBitmap(mPlayer, xPosition, yPosition, null);
我确实在某处听说缩放位图会导致内存问题,但这并不能真正与其他所有内容相加。