关于我的应用:使用BitmapFactory.decode 文件拍摄照片并将其保存到手机记忆库中,将该位图加载到一个固定大小,而不是更改图像视图。
现在,我知道这已被问过一百次了。我一直都在google \ android的manage memory指南,但对于我的任务来说,管理和回收不同的位图有点过分,因为我只使用之一。
到目前为止,这是我的代码:
..
Bitmap bm_thumb = null;
..
private void setPic() {
/* There isn't enough memory to open up more than a couple camera photos */
/* So pre-scale the target bitmap into which the file is decoded */
/* Get the size of the ImageView */
int targetW = imv_thumb.getWidth();
int targetH = imv_thumb.getHeight();
/* Get the size of the image */
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(PhotoPath, bmOptions);
int photoW = bmOptions.outWidth;
int photoH = bmOptions.outHeight;
bmOptions.inSampleSize = 1;
/* Figure out which way needs to be reduced less */
int scaleFactor = 1;
if ((targetW > 0) || (targetH > 0)) {
scaleFactor = Math.min(photoW/targetW, photoH/targetH);
}
/* Set bitmap options to scale the image decode target */
bmOptions.inSampleSize = scaleFactor; //was after decode bounds
bmOptions.inJustDecodeBounds = false;
/* Decode the JPEG file into a Bitmap */
bm_thumb = BitmapFactory.decodeFile(PhotoPath, bmOptions);
/* Associate the Bitmap to the ImageView */
imv_thumb.setImageBitmap(bm_thumb);
imv_thumb.setVisibility(View.VISIBLE);
}
这些行不在代码中,因为它们目前让我很困惑。
BitmapFactory.decodeFile(PhotoPath, bmOptions);
mCurrentBitmap = Bitmap.createBitmap(bmOptions.outWidth, bmOptions.outHeight, Bitmap.Config.ARGB_8888)
bmOptions.inBitmap = bm_thumb;
每次更改bitMapOptions时是否需要运行decodeFile? 另外,如果decodeFile方法返回一个bitMap,为什么我还需要创建一个? 我应该给inBitmap谁?我已经尝试了两种选择,似乎没有解决我的OOM错误。
首次安装和测试我的应用后,我的OOM开始了很长时间。我的问题是,我怎么知道我已经解决了这个问题?如果写得正确,它会修复错误,还是我需要选择"清除缓存"在电话上,并希望它永远不会再发生?
对于长篇文章感到抱歉,我真的想继续专注..