java - 如何消除因循环从网络摄像头下载图像而导致的 GC_FOR_ALLOC 消息

标签 java android

我在一秒钟内多次从 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/

相关文章:

java - 使用 Activity 目录在 java 或 .net 应用程序中自动验证用户

安卓图表引擎 : filling below the line chart

android - Android Gradle Min SDK版本更改导致错误

android - 从一开始就从 Facebook 获取所有用户 Activity 提要?

java - 从 lambda 表达式中更新 AtomicBoolean

java - 当路径/名称包含 Unicode 字符时如何运行可执行 JAR?

java到C/C++(carbide c/c++)转换

java - 编辑单元格后编辑/更新 JTable

java - ConcurrentHashMap 每次读取时都锁定?

java - Android 在应用程序暂停后询问 findViewById 时返回 NullPointerException