From bc573460782775e7520a882c2696968dc979ee30 Mon Sep 17 00:00:00 2001 From: peerless2012 Date: Mon, 10 Aug 2026 17:56:16 +0800 Subject: [PATCH] Avoid call invalidate after the View is detach. --- .../ass/media/widget/AssSubtitleCanvasView.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib_ass_media/src/main/java/io/github/peerless2012/ass/media/widget/AssSubtitleCanvasView.kt b/lib_ass_media/src/main/java/io/github/peerless2012/ass/media/widget/AssSubtitleCanvasView.kt index e3d7b8b..4813007 100644 --- a/lib_ass_media/src/main/java/io/github/peerless2012/ass/media/widget/AssSubtitleCanvasView.kt +++ b/lib_ass_media/src/main/java/io/github/peerless2012/ass/media/widget/AssSubtitleCanvasView.kt @@ -36,7 +36,9 @@ class AssSubtitleCanvasView : View, AssSubtitleRender { private var renderSize = Size.ZERO // Use a local param, avoid create each time. - private val invalidateCallback = Runnable { invalidate() } + private val invalidateCallback = Runnable { + if (isAttachedToWindow) invalidate() + } // Use a local param, avoid create each time. private val assRenderCallback: (AssFrame?) -> Unit = assRenderCallback@{ assFrame -> @@ -49,7 +51,7 @@ class AssSubtitleCanvasView : View, AssSubtitleRender { it.bitmap?.prepareToDraw() } this.assFrame = assFrame - handler.post(invalidateCallback) + post(invalidateCallback) } constructor(context: Context, assHandler: AssHandler) : this(context, null, assHandler) @@ -127,6 +129,8 @@ class AssSubtitleCanvasView : View, AssSubtitleRender { assHandler.renderCallback = null assExecutor?.shutdown() assExecutor = null + removeCallbacks(invalidateCallback) + assFrame = null super.onDetachedFromWindow() } } \ No newline at end of file