回收位图

ani*_*nia 4 android memory-management bitmap out-of-memory

我正在研究涉及位图操作的项目.因为我不想有OutofMemoryError我试图回收每个未使用的位图.不幸的是,我已经回收太多而且"试图使用回收的位图"错误.

我在用:

 Bitmap.createBitmap(bmp, x,y,w,h, matrix, false);
 Bitmap.createScaledBitmap(bmp, w, h,true);
Run Code Online (Sandbox Code Playgroud)

我应该在这种方法后回收bmp还是由它们回收?喜欢:

Bitmap newBitmap = Bitmap.createBitmap(bmp, x,y,w,h, matrix, false);
bmp.recycle();
Run Code Online (Sandbox Code Playgroud)

我可以在imageView.setImageBitmap()之后再循环一个之前在这里使用的吗?例如

myImageView.setImageBitmap(myBitmap);
myImageView.setImageBitmap(newBitmap);
myBitmap.recycle();
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

tig*_*chi 9

您应该只在不再需要时回收位图.但是,如果要显示位图,需要位图.如果您不想显示它,则可以回收位图.

  • 不,它不起作用并给你一个例外,因为你的位图然后在它被渲染之前被回收.调用setImageBitmap不会立即将位图呈现到屏幕上.这发生在下一个UI更新周期的某个未来点.即使这样,您也需要保留位图,因为您已将其分配给ImageView.只要您不再使用ImageView,或者在设置不同的位图后,就可以立即回收旧的位图.回收所有旧位图的安全位置在Activity.onStop()中.你也可以使用onPause但是你必须在onResume中重新创建它们 (3认同)