没有回收位调用位图的循环错误 [英] Bitmap recycle error with no bitmap recycle call
问题描述
我有一个图像加载到意见的适配器。它运行只是罚款时,我真的被快速向上和向下滚动列表视图测试ListView中,我得到一个画布上尝试使用回收的位图。不过,我是因为我使用的是ImageLoader的永远不会调用bitmap.recycle。该错误不给我哪里有错误发生的位置。我的猜测是,适配器自动回收其自身的位图,因为我不作手动呼叫。这个问题是不是很一致的,但我可以重新创建它,如果我真的努力。是什么原因造成这个问题,或者我怎么能找到呢?
下面是堆栈跟踪。
11月11日至26日:01:41.131 1124年至1124年/ com.android.wallfly E / AndroidRuntime:致命异常:主要
工艺:com.android.wallfly,PID:1124
了java.lang.RuntimeException:画布:试图用一个循环位图android.graphics.Bitmap@432bc210
在android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1084)
在android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:844)
在android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:496)
在android.widget.ImageView.onDraw(ImageView.java:1058)
在android.view.View.draw(View.java:15304)
在android.view.View.getDisplayList(View.java:14198)
在android.view.View.getDisplayList(View.java:14240)
在android.view.View.draw(View.java:15018)
在android.view.ViewGroup.drawChild(ViewGroup.java:3298)
在android.view.ViewGroup.dispatchDraw(ViewGroup.java:3135)
在android.view.View.getDisplayList(View.java:14193)
在android.view.View.getDisplayList(View.java:14240)
在android.view.View.draw(View.java:15018)
在android.view.ViewGroup.drawChild(ViewGroup.java:3298)
在android.view.ViewGroup.dispatchDraw(ViewGroup.java:3135)
在android.view.View.draw(View.java:15307)
在android.view.View.getDisplayList(View.java:14198)
在android.view.View.getDisplayList(View.java:14240)
在android.view.View.draw(View.java:15018)
在android.view.ViewGroup.drawChild(ViewGroup.java:3298)
在android.view.ViewGroup.dispatchDraw(ViewGroup.java:3135)
在android.view.View.draw(View.java:15307)
在android.widget.FrameLayout.draw(FrameLayout.java:472)
在android.view.View.getDisplayList(View.java:14198)
在android.view.View.getDisplayList(View.java:14240)
在android.view.View.draw(View.java:15018)
在android.view.ViewGroup.drawChild(ViewGroup.java:3298)
在android.widget.ListView.drawChild(ListView.java:3393)
在android.view.ViewGroup.dispatchDraw(ViewGroup.java:3135)
在android.widget.AbsListView.dispatchDraw(AbsListView.java:2918)
在android.widget.ListView.dispatchDraw(ListView.java:3388)
在android.view.View.draw(View.java:15307)
在android.widget.AbsListView.draw(AbsListView.java:5184)
在android.view.View.getDisplayList(View.java:14198)
在android.view.View.getDisplayList(View.java:14240)
在android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3272)
在android.view.View.getDisplayList(View.java:14135)
在android.view.View.getDisplayList(View.java:14240)
下面是ImageLoader的信息
ImageLoaderConfiguration配置=新ImageLoaderConfiguration.Builder(上下文)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.memoryCache(新WeakMemoryCache())
.diskCacheFileNameGenerator(新Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.writeDebugLogs()//发布的应用程序中删除
。建立(); 选项=新DisplayImageOptions.Builder()
.cacheInMemory(真)
.cacheOnDisc(真)
.bitmapConfig(Bitmap.Config.RGB_565)
.resetViewBeforeLoading(真)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
。建立();
您ImageLoader的显然是做一些回收。
请参阅Android试图用一个循环的位图,不是我的code 和<一个href=\"https://stackoverflow.com/questions/22129420/canvas-trying-to-use-a-recycled-bitmap-android-graphics-bitmap-in-android\">Canvas:试图用一个循环位android.graphics.Bitmap在android系统为了更好地理解这个问题。
如何修复它取决于你的实现(code)和你的ImageLoader的。
发布一些code或堆栈跟踪可能的帮助。
I have an adapter that loads images into views. It runs fine except that when I test the ListView by scrolling really fast up and down the listview, I get a "Canvas trying to use a recycled bitmap". However I never call bitmap.recycle because I am using an imageloader. The error does not give me a location of where the error is happening. My guess is that the adapter automatically recycles bitmaps on its own since I do not make a manual call. This problem is not very consistent but I can recreate it if I really try. What is causing this problem or how can I locate it?
Here is the stacktrace.
11-26 11:01:41.131 1124-1124/com.android.wallfly E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.android.wallfly, PID: 1124
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@432bc210
at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1084)
at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:844)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:496)
at android.widget.ImageView.onDraw(ImageView.java:1058)
at android.view.View.draw(View.java:15304)
at android.view.View.getDisplayList(View.java:14198)
at android.view.View.getDisplayList(View.java:14240)
at android.view.View.draw(View.java:15018)
at android.view.ViewGroup.drawChild(ViewGroup.java:3298)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3135)
at android.view.View.getDisplayList(View.java:14193)
at android.view.View.getDisplayList(View.java:14240)
at android.view.View.draw(View.java:15018)
at android.view.ViewGroup.drawChild(ViewGroup.java:3298)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3135)
at android.view.View.draw(View.java:15307)
at android.view.View.getDisplayList(View.java:14198)
at android.view.View.getDisplayList(View.java:14240)
at android.view.View.draw(View.java:15018)
at android.view.ViewGroup.drawChild(ViewGroup.java:3298)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3135)
at android.view.View.draw(View.java:15307)
at android.widget.FrameLayout.draw(FrameLayout.java:472)
at android.view.View.getDisplayList(View.java:14198)
at android.view.View.getDisplayList(View.java:14240)
at android.view.View.draw(View.java:15018)
at android.view.ViewGroup.drawChild(ViewGroup.java:3298)
at android.widget.ListView.drawChild(ListView.java:3393)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3135)
at android.widget.AbsListView.dispatchDraw(AbsListView.java:2918)
at android.widget.ListView.dispatchDraw(ListView.java:3388)
at android.view.View.draw(View.java:15307)
at android.widget.AbsListView.draw(AbsListView.java:5184)
at android.view.View.getDisplayList(View.java:14198)
at android.view.View.getDisplayList(View.java:14240)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3272)
at android.view.View.getDisplayList(View.java:14135)
at android.view.View.getDisplayList(View.java:14240)
Here is the ImageLoader info
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new WeakMemoryCache())
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.writeDebugLogs() // Remove for release app
.build();
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisc(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.resetViewBeforeLoading(true)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.build();
Your ImageLoader is doing some recycling obviously.
See Android trying to use a recycled bitmap, not in my code and Canvas: trying to use a recycled bitmap android.graphics.Bitmap in android for a better understanding of the problem.
How to fix it depends on your implementation (code) and your "imageloader". Posting some code or the StackTrace might help.
这篇关于没有回收位调用位图的循环错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!