Android 即使我重用位图,运行时内存也会异常增长

Android 即使我重用位图,运行时内存也会异常增长,android,android-image,android-bitmap,Android,Android Image,Android Bitmap,在用于拾取画廊图像的相机中的onActivityResult()中,我这样做: Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); 其中imageUri文件的大小约为7.0MB,因此我正在创建较小的位图,并将其分配给相同的位图: bitmap=Bitmap.createScaledBitmap(bitmap,screenWidth,screenHeight/2, tru

在用于拾取画廊图像的相机中的
onActivityResult()
中,我这样做:

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); 
其中imageUri文件的大小约为7.0MB,因此我正在创建较小的位图,并将其分配给相同的位图:

bitmap=Bitmap.createScaledBitmap(bitmap,screenWidth,screenHeight/2, true)
但是运行时内存异常增长,此时分配给7.0 MB位图的内存没有释放,GC是否没有收集以前分配的空间?还有什么原因呢?

试试这个:

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,但我仍然可以工作。我看不到为“bitmap”变量分配的内存有任何释放,该变量保存了大约7.0MB的数据