我从事的是instagram之类的android项目。项目中有很多图像,数据等。我使用Glide库在ImageView中设置图像。 因此,如果我连续打开10个个人资料页面,则会出现内存不足错误,例如:
java.lang.OutOfMemoryError: Failed to allocate a 44236812 byte allocation with 16777216 free bytes and 32MB until OOM
我试图将setFlag设置为intent:
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
并尝试添加Manifest.xml:
android:largeHeap="true"
android:hardwareAccelerated="false"
并尝试一一添加Glide函数:
.apply(new RequestOptions().format(DecodeFormat.PREFER_RGB_565)
.skipMemoryCache( true )
.diskCacheStrategy( DiskCacheStrategy.NONE ) and DiskCacheStrategy.DATA
但是他们都无法解决我的错误。
此屏幕截图也是我的Profiler输出:
我在Profiler内存中测试的内存最大为600 mb,然后应用程序将转储。
我该如何解决?我需要别人的帮助。
答案 0 :(得分:0)
我的应用出现类似问题。建议您降低图片质量或调整图片大小。 要减小尺寸,您可以使用以下方法:
public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
int width = image.getWidth();
int height = image.getHeight();
float bitmapRatio = (float)width / (float) height;
if (bitmapRatio > 1) {
width = maxSize;
height = (int) (width / bitmapRatio);
} else {
height = maxSize;
width = (int) (height * bitmapRatio);
}
return Bitmap.createScaledBitmap(image, width, height, true);
}
//位图= getResizedBitmap(位图,1000); // 1000是图片的最大尺寸。
或者您可以通过以下方式压缩图像:
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(new FileInputStream(image));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
FileOutputStream fos = new FileOutputStream(dirname + imageName);
bitmap = getResizedBitmap(bitmap, 1000);
// quality is 80%
bitmap.compress(Bitmap.CompressFormat.PNG, 80, fos);