我在一秒钟内多次从 ip 网络摄像头下载图像,并使用 setImageBitmap 将其分配给 ImageView 对象。
try {
final Bitmap image = downloadBitmap();
if (image != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
ImageView imageView = (ImageView) view.findViewById(R.id.imageView1);
if (imageView != null) {
imageView.setImageBitmap(image);
}
/* Try to get rid of the GC_FOR_ALLOC: */
//image.recycle();
//System.gc();
//Runtime.getRuntime().gc();
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
但是 logcat 通过显示“爆炸”了
03-30 12:15:55.059: D/dalvikvm(19846): GC_FOR_ALLOC freed 186K, 7% free 50113K/53856K, paused 30ms, total 31ms
03-30 12:15:56.069: D/dalvikvm(19846): GC_FOR_ALLOC freed 65K, 7% free 53713K/57460K, paused 27ms, total 27ms
03-30 12:15:57.099: D/dalvikvm(19846): GC_FOR_ALLOC freed 94K, 7% free 57349K/61064K, paused 27ms, total 27ms
03-30 12:15:58.129: D/dalvikvm(19846): GC_FOR_ALLOC freed 124K, 6% free 60940K/64668K, paused 67ms, total 67ms
我尝试回收位图图像:
image.recycle();
System.gc();
Runtime.getRuntime().gc();
但是如果再次绘制 ImageView 则会导致异常:
**03-30 12:15:53.109: E/AndroidRuntime(19846): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@42e1bfb8
有人知道如何删除 logcat 中的 GC_FOR_ALLOC 消息吗?
最诚挚的问候, 于尔根
最佳答案
垃圾收集是 Android 操作系统上的一个常见过程。除非你有不合理的内存分配/内存泄漏,否则你不必与之抗争。
关于java - 如何消除因循环从网络摄像头下载图像而导致的 GC_FOR_ALLOC 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22742848/