bilibili / DanmakuFlameMaster

Android开源弹幕引擎·烈焰弹幕使 ~
http://app.bilibili.com/
Apache License 2.0
9.54k stars 2.1k forks source link

Cannot draw recycled bitmaps #109

Open guojilong opened 9 years ago

guojilong commented 9 years ago

java.lang.IllegalArgumentException: Cannot draw recycled bitmaps at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:739) at android.view.GLES20RecordingCanvas.drawBitmap(GLES20RecordingCanvas.java:91) at master.flame.danmaku.danmaku.model.android.DrawingCacheHolder.draw(DrawingCacheHolder.java:181) at master.flame.danmaku.danmaku.model.android.AndroidDisplayer.draw(AndroidDisplayer.java:259) at master.flame.danmaku.danmaku.model.BaseDanmaku.draw(BaseDanmaku.java:187) layout getRectAtTime at master.flame.danmaku.danmaku.renderer.android.DanmakuRenderer.draw(DanmakuRenderer.java:87) at master.flame.danmaku.controller.DrawTask.drawDanmakus(DrawTask.java:244) at master.flame.danmaku.controller.DrawTask.draw(DrawTask.java:160) at master.flame.danmaku.controller.CacheManagingDrawTask.draw(CacheManagingDrawTask.java:84) at master.flame.danmaku.controller.DrawHandler.draw(DrawHandler.java:562) at master.flame.danmaku.ui.widget.DanmakuView.onDraw(DanmakuView.java:274)

ctiao commented 9 years ago

在一些动作(seek/暂停恢复等)导致回收缓存的循环在异步线程运行,这时候再绘制 并且没有退出循环的话,可能会出现Cannot draw recycled bitmaps的情况,但是出现这个exception的几率不大。 我们会尝试改进缓存的回收 尽量跟绘制线程同步。

10045125 commented 9 years ago

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@4388a248 at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1084) at android.graphics.Canvas.drawBitmap(Canvas.java:1139) at master.flame.danmaku.danmaku.model.android.DrawingCacheHolder.draw(DrawingCacheHolder.java:181) at master.flame.danmaku.danmaku.model.android.AndroidDisplayer.draw(AndroidDisplayer.java:259) at master.flame.danmaku.danmaku.model.BaseDanmaku.draw(BaseDanmaku.java:187) at master.flame.danmaku.danmaku.renderer.android.DanmakuRenderer.draw(DanmakuRenderer.java:87) at master.flame.danmaku.controller.DrawTask.drawDanmakus(DrawTask.java:244) at master.flame.danmaku.controller.DrawTask.draw(DrawTask.java:160) at master.flame.danmaku.controller.CacheManagingDrawTask.draw(CacheManagingDrawTask.java:84) at master.flame.danmaku.controller.DrawHandler.draw(DrawHandler.java:558) at master.flame.danmaku.ui.widget.DanmakuSurfaceView.drawDanmakus(DanmakuSurfaceView.java:242) at master.flame.danmaku.controller.DrawHandler.updateInCurrentThread(DrawHandler.java:342) at master.flame.danmaku.controller.DrawHandler.handleMessage(DrawHandler.java:228) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.os.HandlerThread.run(HandlerThread.java:61)

我这边也遇到过了,概率是不是很大。不过希望解决。