从文件流加载drawable导致OutOfMemory错误

时间:2013-02-25 18:13:52

标签: android

我知道该行

Drawable.createFromStream(fileInputStream, "src");

能够在达到应用程序的内存限制时抛出OutOfMemory错误。但是,在谈到提高记忆效率时,我想我一直非常勤奋。

这是实际检索drawable的块:

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 size)添加到缓存中,一旦离开该列表视图,该缓存就会被清除。

2)每当用新的图像替换图像时,总是清除ImageView的可绘制和运行垃圾收集,或者调用托管大图像的活动的onStop()。

我认为这就够了,但我猜不是。我想做的一件事是切换到Bitmaps而不是drawables(使用Android自己的BitmapFactory)。这甚至会在内存/效率方面产生影响吗?

感谢任何反馈。谢谢!

2 个答案:

答案 0 :(得分:1)

尝试使用BitmapFactory.Options中的inPurgeable选项从Bitmap创建drawable。我记得有同样的问题,并以这种方式解决了。

答案 1 :(得分:0)

图像应该很大,这就是为什么低ram的手机会给出OutOfMemory Exception。 如果可以的话,尝试减小图像的大小和分辨率。看看http://developer.android.com/training/displaying-bitmaps/load-bitmap.html