![]() |
1
4
|
![]() |
2
13
注射是一个很好的提示。但固定值通常不起作用,因为文件中的大位图通常是用户文件,从微小的缩略图到数字图像中的12MP图像都有不同。 这是一个快速而肮脏的加载程序。我知道还有改进的空间,比如更好的编码循环,使用2的幂进行更快的解码,等等。但这是一个工作的开始…
顺便说一句,在更新的API中也有很多位图工厂。选项是为了使图像适合屏幕dpi,但我不确定它们是否真的简化了任何东西。使用android.util.displaymetrics.density或简单地使用固定大小以减少内存消耗似乎效果更好。 |
![]() |
3
5
关于这个
link
,请注意
|
![]() |
4
4
确保避免内存不足错误创建位图!在大多数平台上,Android没有太多的内存可供使用,而且使用位图很快就会耗尽。另外,请确保尽可能多地手动回收位图,我注意到垃圾收集速度可能相当慢。
|
![]() |
5
4
最后我使用下面的代码调整了位图的大小,这似乎解决了这个问题。
|
![]() |
6
1
我想是-它说的是什么。您的图像太大,因为当内存耗尽时它被加载到流中,所以会引发异常。这甚至不是关于你有多少总体内存的问题,而是关于你的特定活动有多少可用的问题。 |
![]() |
7
1
在decodefile中使用这些选项。希望您能将位图元素化超过虚拟机预算问题。
|
![]() |
8
0
你检查过DDMS吗? 在我遇到的情况下,它可能不是图像的大小,因为Android似乎可以很好地处理大型图像。 如果使用ddms跟踪堆,您可能会发现正好有很多可用内存。 您可以通过添加这个来“扩展”您的堆
到您的代码,强制堆展开。这可能会降低频率。 不幸的是,除了这个例外,它声称它不能分配一些字节。假设1米。如果你看一下“免费”行,你会发现最大的块是1米。 有件奇怪的事我想不出来。它甚至与刷卡图像的速度无关。 我在一些线程中看到,对于位图,您可以称之为“回收”。我仍然不明白如果堆的大小远远高于所取的大小,为什么它会有帮助。 |
![]() |
9
0
当我开始将一个图像的大小从320x240调整为64x240(缩小),然后导入到我的项目中(因为我想提高渲染速度,在这之前它包含很多无用的alpha区域)。 现在最后一个答案很有意义:
我想这就是发生在我身上的事。Android会自动将可绘制文件解码为位图(然后在编译时全部存储在堆中?) 当我在运行时使用图像的较小版本时,我开始看到这个错误(我在运行时使用BitmapFactory.DecodeResource和Bitmap.CreateScalledBitmap在运行时对它们进行缩放,因为我用怀旧图形编写了一个VGA游戏)。 这一定像玛维说的:在我的情况下,在缩小了我的可绘制/图像并将其导入到我的项目之后,堆还不够大。 当我将图像重新调整到更大的尺寸(320x240)时,我能够消除内存不足的异常,这验证了我猜想的问题吗? |
![]() |
user2257918 · 为什么此代码不创建棋盘格图案? 7 年前 |
![]() |
Ally · 在位图上绘制长字符串会导致绘图问题 7 年前 |
![]() |
Melih · 谷歌移动视觉低图像质量 7 年前 |
![]() |
Dhruv Chadha · OpenGL图像未映射到坐标 7 年前 |