Android 从文件流加载可绘制文件导致OutOfMemory错误

Android 从文件流加载可绘制文件导致OutOfMemory错误,android,Android,我知道那条线 Drawable.createFromStream(fileInputStream,“src”) 当达到应用程序的内存限制时,能够抛出OutOfMemory错误。然而,我想我在提高记忆力方面一直很努力 下面是实际检索可绘制文件的块的示例: if(file.exists()) { //Get image from app files, null if it doesn't exist try { FileInputStream fis = conte

我知道那条线

Drawable.createFromStream(fileInputStream,“src”)

当达到应用程序的内存限制时,能够抛出OutOfMemory错误。然而,我想我在提高记忆力方面一直很努力

下面是实际检索可绘制文件的块的示例:

if(file.exists()) {

    //Get image from app files, null if it doesn't exist
    try {
        FileInputStream fis = context.openFileInput(filename);
        drawable = Drawable.createFromStream(fis, "src");
        fis.close();

        if(!saveInCache)
            mInstanceCache.put(urlString, drawable);

        return drawable;
    } catch(Exception e) {
        e.printStackTrace();
    }
}
在我这方面,我从未能够重现OutOfMemory异常,但我每天从遇到它的用户那里收到2-3份报告。我想让我的代码更有效率,但我没有主意了。我已经做了以下工作:

1) 将小图像(listview大小)添加到缓存中,该缓存在您离开该listview后立即清除

2) 无论何时用新映像替换映像,或调用承载大映像的活动的onStop(),都要清除ImageView的可绘制并运行垃圾回收

我以为那就够了,但我想不行。我想做的一件事是切换到位图而不是Drawable(使用Android自己的位图工厂)。这会对内存/效率产生影响吗


任何反馈都将不胜感激。谢谢

使用BitmapFactory.Options中的Inpurgable选项,尝试从位图创建可绘制文件。我记得我也遇到过同样的问题,并通过这种方式解决了。

图像应该很大,这就是为什么内存不足的手机会出现OutOfMemory异常。
如果可以,尽量减小图像的大小和分辨率。看一看

我读了那个教程,但不幸的是,在这种情况下,它并不真正适用于我。我正在加载的图像很大(大约500x500像素左右,但通常仅在100kb左右。此外,我正在以全分辨率加载图像(这是一个大图像,占据了大约一半的屏幕,因此inSampling将无法实现拥有大图像的目的,真的。该教程主要介绍如何有效地将大图像转化为大拇指,我还缺少其他适用于以全尺寸加载大图像的内容吗?我将尝试此方法。谢谢!我不会能够立即看到结果,但希望我能确认这一点,以便在几周内其他人可以使用它,因为我发现我不会再从内存错误中获得更多信息。
Bitmap Bitmap=BitmapFactory.decodeFile(文件名,选项);bitmapDrawable=new bitmapDrawable(context.getResources(),Bitmap)这就是我现在正在尝试的。它可以工作,但是因为你的内存中同时有一个位图绘制和位图,这不会占用更多的内存吗?我不知道,也许不会。想法?如果你失去了对位图对象的引用,它将不会占用内存。记住激活可输入选项!是的,
选项
ob我在评论中发布的代码中的ject已将Inpurgable设置为true。谢谢!