0

我知道这条线

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

2) 每当图像被替换为新图像或调用托管大图像的活动的 onStop() 时,始终清除 ImageView 的可绘制对象并运行垃圾收集。

我以为这就够了,但我想不会。我想做的一件事是切换到位图而不是可绘制对象(使用 Android 自己的 BitmapFactory)。这甚至会在内存/效率方面产生影响吗?

任何反馈表示赞赏。谢谢!

4

2 回答 2

1

尝试使用 BitmapFactory.Options 中的 inPurgeable 选项从位图创建可绘制对象。我记得有同样的问题,并以这种方式解决。

于 2013-02-25T18:17:58.157 回答
0

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

于 2013-02-25T18:18:20.270 回答