从静态方法加载位图是否内存有效?

时间:2013-09-25 16:42:42

标签: java android bitmap out-of-memory

我想知道加载位图的方式是否有效,并且可以多次使用以持续加载和卸载位图。

我使用静态帮助器方法从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错误并将垃圾收集不需要的资源?

提前致谢

1 个答案:

答案 0 :(得分:0)

尝试过早优化总是一个坏主意。

这种方法可以防止这样的问题,如果您在哪里加载大量的图片,但如果您没有得到该错误,更好的方法可能是加载所有图像并存储它们以备将来使用,这样您就不需要IO操作这么多次。

此外,如果您的目标是Java 7,请使用try-with-resources,这样您就不需要关闭流:它会自动关闭。

最后,如果没有加载图像,而不是返回null,最好返回一个默认的(你已经在内存中),所以你要避免空检查。请参阅维基百科中的Null Object Pattern