对于我的应用程序,我需要加载一个有时可能非常大的位图。即使在像galaxy S2这样的设备上,我也会出现OutOfMemory错误。我四处搜索,发现我需要回收位图。
以前我用BitmapFactory加载位图,创建一个新的缩放位图,并在一行中创建一个bitmapdrawable。通过这样做,我将两个位图加载到内存中?我应该创建初始位图,然后在创建缩放位图后回收它吗?
如果活动会频繁启动,我应该将位图一次加载到静态字段,还是应该每次都回收并重新创建?
由于
答案 0 :(得分:0)
将流程拆分为多个步骤。如果要根据可用的屏幕空间测量位图,然后加载缩放的位图,则可以使用BitmapFactory.Options.inJustDecodeBounds在不将位图加载到内存的情况下执行第一步。这将为您提供一个没有像素数据但具有width和height属性的Bitmap对象。然后使用它来使用BitmapFactory.Options.inSampleSize解码缩放的位图。
谷歌这些条款,你会发现大量的示例代码正在这样做。是的,当你完成Bitmap时不要忘记回收。
https://www.google.com/#q=BitmapFactory+Options+inJustDecodeBounds+inSampleSize