避免位图自动回收 - Android

时间:2014-09-27 11:01:06

标签: java android bitmap drawing screenshot

每当触摸屏幕时我都会捕捉屏幕,并且我在ArrayList中保存位图。

screen.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            count++;
            screen.setDrawingCacheEnabled(false);
            screen.setDrawingCacheEnabled(true);

            Bitmap b = screen.getDrawingCache();
            bitmapList.add(b);
            Log.e("Captured Image Number: ", ""+count);
            return false;
        }
    });

然后当我尝试访问位图来保存它们时,它们就不再存在了,再循环!
我该怎么办? 如果我在这里保存,则需要很长时间 试图转换为byte[]以避免回收,它也花了很长时间才预期 我想把它保持在15fps,我应该怎么做。

2 个答案:

答案 0 :(得分:0)

将位图存储在类级别变量中而不是temp var中。如果您的屏幕仍处于活动状态并且您的屏幕保留了对位图对象的硬引用,则不应该回收它。

答案 1 :(得分:0)

这可能为时已晚。但由于目前还没有正确的答案,我想就这个问题发布我的解决方法。我尝试了harism的答案,需要像这样使用。

因此,如果您有位图的数组列表,首先需要使用Bitmap.copy(Bitmap.Config config, boolean isMutable)方法保存位图的副本。

然后,当您打算使用位图时,不要直接使用位图,而是使用相同的复制方法获取位图的副本,并且应该在您的应用程序中使用复制的位图。

底线是一次多次使用位图,它将被回收。所以我所做的就是避免使用原始位图,我会获取原始位图的副本并使用它们。