回收

时间:2016-03-27 12:08:32

标签: java android bitmap

我使用下面的代码来减少位图大小并节省内存。但是当我使用它时,消耗的RAM内存不是释放。解决方案是什么?我在下面的方法之后调用了System.gc(),但不影响。

public static void compress_save(Bitmap input, String path, int dim) throws IOException {
    FileOutputStream out = new FileOutputStream(path);
    input = Bitmap.createScaledBitmap(input, Generals.img_width, Generals.img_height, true);
    input.compress(Bitmap.CompressFormat.JPEG, dim, out);

    out.flush();
    out.close();
    input.recycle();
}

我在活动结果中调用上面的函数

 Uri selectedImageUri = data.getData();
                imgPath = Util.getRealPathFromURI(MainActivity.this, selectedImageUri);
                Bitmap bitmap = BitmapFactory.decodeFile(imgPath);
                try {
                    imgPath = Generals.App_Directory + "/temp/" + SystemClock.currentThreadTimeMillis();
                    ImageUtil.compress_save(bitmap, imgPath, 50);
                    bitmap.recycle();
                    System.gc();
                    confirmDialog();
                } catch (IOException e) {
                    FileLogException.print(e);
                }

1 个答案:

答案 0 :(得分:0)

我不确定我说的是什么,但我认为当您调用回收时,如果您的设备有足够的RAM内存,则将位图保留在RAM中,当RAM空间不足时,位图RAM内存会释放。

我在两个设备上测试了这些代码。当我的设备在回收位图后有大量内存RAM空间没有释放但是当设备在回收位图RAM内存释放后内存不足时。