我使用下面的代码来减少位图大小并节省内存。但是当我使用它时,消耗的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);
}
答案 0 :(得分:0)
我不确定我说的是什么,但我认为当您调用回收时,如果您的设备有足够的RAM内存,则将位图保留在RAM中,当RAM空间不足时,位图RAM内存会释放。
我在两个设备上测试了这些代码。当我的设备在回收位图后有大量内存RAM空间没有释放但是当设备在回收位图RAM内存释放后内存不足时。