后堆栈中的Android Activity OutOfMemoryError

时间:2019-03-26 13:32:50

标签: android android-activity out-of-memory back-stack

我从事的是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 Output

我在Profiler内存中测试的内存最大为600 mb,然后应用程序将转储。

我该如何解决?我需要别人的帮助。

1 个答案:

答案 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);