位图内存managemant Android

时间:2016-01-01 19:01:40

标签: android memory memory-management bitmap

关于我的应用:使用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开始了很长时间。我的问题是,我怎么知道我已经解决了这个问题?如果写得正确,它会修复错误,还是我需要选择"清除缓存"在电话上,并希望它永远不会再发生?

对于长篇文章感到抱歉,我真的想继续专注..

0 个答案:

没有答案