0

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

我使用静态辅助方法从资产文件夹加载位图,因此:

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 错误,并且会垃圾收集不需要的资源吗?

提前致谢

4

1 回答 1

0

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

如果您加载大量图片,此方法可以防止此类问题,但如果您没有收到该错误,更好的方法可能是加载所有图像并存储它们以供将来使用,这样您就不需要执行 IO 操作很多次。

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

最后,如果图像没有加载,而不是返回 null,最好返回一个默认值(你已经在内存中),这样你就可以避免 null 检查。请参阅维基百科中的空对象模式

于 2013-09-25T19:53:54.110 回答