我在我的应用中与OutOfMemoryError作斗争。
我创建了一个背景图像,它是800像素x 480像素。当此图像加载到使用它作为背景的视图中时,我认为操作系统将使用800 * 480 * 4字节。这是很多记忆。
如果我创建一个10像素x 10像素9补丁图像来替换整个屏幕图像。当渲染使用9补丁的视图时,操作系统会自动将9补丁图像缩放到800x480。我的问题是,在9补丁的情况下,操作系统将使用多少内存来绘制缩放的9补丁图像?它是10 * 10 * 4字节还是800 * 480 * 4字节?
感谢。
答案 0 :(得分:1)
首先,如果它是背景图像,并且可以缩放,请这样做,因为它被认为是最佳实践(特别是对于背景)并且可以通过选择正确的颜色来补偿图像清晰度的轻微损失和/或背景图案。
关于内存,如果你使用Drawable,那么你是安全的。但是Bitmaps显然没有以标准的Java方式分配,而是通过本机调用;分配是在虚拟堆之外完成的,但是会根据它进行计数。 More on this problem here