我知道该行
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)。这甚至会在内存/效率方面产生影响吗?
感谢任何反馈。谢谢!
答案 0 :(得分:1)
尝试使用BitmapFactory.Options中的inPurgeable选项从Bitmap创建drawable。我记得有同样的问题,并以这种方式解决了。
答案 1 :(得分:0)
图像应该很大,这就是为什么低ram的手机会给出OutOfMemory Exception。 如果可以的话,尝试减小图像的大小和分辨率。看看http://developer.android.com/training/displaying-bitmaps/load-bitmap.html