位图内存问题?

时间:2014-06-12 21:28:01

标签: java android bitmap dalvik

我对Dalvik如何处理位图数据有疑问。

说我有一个课 PictureFrame

public final class PictureFrame {

    private final Bitmap mBitmap;   

    public PictureFrame(final Bitmap pBitmap) {
        this.mBitmap = pBitmap; // Loaded externally, recycle() has not been called
    }

    public final Bitmap getBitmap() {
        return this.mBitmap;
    }
}

我是否可以相信任何对getBitmap()的调用都会安全地返回一张不会被垃圾收集的图片?此外,如果对getBitmap()的调用很少,那么使用 PictureFrame 的许多实例的应用程序会有效吗?或者,仅仅保留对位图在磁盘上的位置的引用,并且每次调用getBitmap()每次都执行文件I / O操作更合理吗?

2 个答案:

答案 0 :(得分:3)

假设您没有将null传递给构造函数,getBitmap()将永远不会返回null。

但是,如果您确实在位图上调用recycle(),则后续尝试使用该位图将导致IllegalStateException

答案 1 :(得分:2)

除了@David Xu回答,我还建议使用@NonNull注释。这样就可以通过编译时测试保护自己免受空指针异常的影响。

public PictureFrame(@NonNull final Bitmap pBitmap) {
        this.mBitmap = pBitmap; // Loaded externally, recycle() has not been called
    }