【问题标题】:Runtime memory is growing abnormally even if I reuse bitmap即使我重用位图,运行时内存也会异常增长
【发布时间】:2013-11-23 16:34:06
【问题描述】:

在相机中onActivityResult() 中用于挑选我正在这样做的画廊图像:

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); 

imageUri 文件大小约为 7.0MB,因此我正在创建较小尺寸的位图,并将其分配给相同的位图:

bitmap=Bitmap.createScaledBitmap(bitmap,screenWidth,screenHeight/2, true)

但是运行时内存在那个时候异常增长,分配给7.0MB位图的内存没有释放,是GC没有收集之前分配的空间吗?或者还有什么原因?

【问题讨论】:

    标签: android android-image android-bitmap


    【解决方案1】:

    试试这个:

    bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, screenWidth, screenHeight/2, true);
    bitmap.recycle();
    bitmap = null;
    

    注意:最初分配7mb的内存是正常的。你得到一个大约 7mb 的位图。但是你应该在你把它缩小到一个新的位图后回收它。然后你可以看到 7mb 分配减少了。在此之后,您应该只看到在内存中分配的缩放位图的大小。

    【讨论】:

    • 我遵循相同的程序,但我在回收后分配了 null,但我看不到任何内存释放
    • 释放将首先是垃圾回收。或者如果你想立即看到,你可以调用 System.gc();将 null 分配给位图之后。
    • 虽然我分配了 null,但我对我很有用
    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多