我知道这条线
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)。这甚至会在内存/效率方面产生影响吗?
任何反馈表示赞赏。谢谢!