我想知道加载位图的方式是否有效,并且可以多次使用以持续加载和卸载位图。
我使用静态帮助器方法从assets文件夹加载位图,所以:
public static Bitmap assetImage(AssetManager am , String file){
InputStream stream = null;
try{
stream = am.open(file);
Bitmap bmp = BitmapFactory.decodeStream(stream);
if(stream != null){
stream.close();
}
return bmp;
}
catch(IOException e){
return null;
}
}
我将它存储在一个类中(让我们称之为Sprite)。现在,当我加载或我不再需要位图时,我正在回收它并归零。然后再次使用辅助静态方法。 我的问题是,这段代码是否可以帮助我避免OOM错误并将垃圾收集不需要的资源?
提前致谢
答案 0 :(得分:0)
尝试过早优化总是一个坏主意。
这种方法可以防止这样的问题,如果您在哪里加载大量的图片,但如果您没有得到该错误,更好的方法可能是加载所有图像并存储它们以备将来使用,这样您就不需要IO操作这么多次。
此外,如果您的目标是Java 7,请使用try-with-resources,这样您就不需要关闭流:它会自动关闭。
最后,如果没有加载图像,而不是返回null,最好返回一个默认的(你已经在内存中),所以你要避免空检查。请参阅维基百科中的Null Object Pattern。