对于我的应用程序,我需要加载一个有时可能非常大的位图。即使在 Galaxy S2 等设备上,我也会遇到 OutOfMemory 错误。我四处寻找,发现我需要回收位图。
以前我使用 BitmapFactory 加载位图,创建一个新的缩放位图,并在一行中创建一个 bitmapdrawable。通过这样做,我是否将两个位图加载到内存中?我应该创建初始位图,然后在创建缩放位图后回收它吗?
如果活动将频繁启动,我应该将位图一次加载到静态字段还是应该每次回收并重新创建?
谢谢
将流程拆分为多个步骤。如果您正在根据可用屏幕空间测量位图,然后加载缩放的位图,则可以执行第一步,而无需使用 BitmapFactory.Options.inJustDecodeBounds 将位图加载到内存中。这将为您提供一个没有像素数据但具有宽度和高度属性的位图对象。然后使用它使用 BitmapFactory.Options.inSampleSize 解码您的缩放位图。
谷歌这些术语,你会发现大量的示例代码就是这样做的。是的,不要忘记在完成位图后进行回收。
https://www.google.com/#q=BitmapFactory+Options+inJustDecodeBounds+inSampleSize