fix: SurfaceView ANR on Android

This commit is contained in:
edde746
2026-02-15 18:10:46 +01:00
parent 292c4b5d82
commit b62a3501d2
2 changed files with 13 additions and 3 deletions
@@ -1253,6 +1253,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
abandonAudioFocus()
audioManager = null
exoPlayer?.clearVideoSurface()
exoPlayer?.removeListener(this)
exoPlayer?.release()
exoPlayer = null
@@ -1265,9 +1266,14 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener {
contentView.viewTreeObserver.removeOnGlobalLayoutListener(listener)
}
// Post view removal to next frame to avoid SurfaceControl race on render thread
val contentView = activity.findViewById<ViewGroup>(android.R.id.content)
surfaceContainer?.let { contentView.removeView(it) }
subtitleView?.let { contentView.removeView(it) }
val container = surfaceContainer
val subtitle = subtitleView
contentView.post {
container?.let { contentView.removeView(it) }
subtitle?.let { contentView.removeView(it) }
}
surfaceContainer = null
surfaceView = null
subtitleView = null
@@ -723,8 +723,12 @@ class MpvPlayerCore(private val activity: Activity) :
contentView.viewTreeObserver.removeOnGlobalLayoutListener(listener)
}
// Post view removal to next frame to avoid SurfaceControl race on render thread
val contentView = activity.findViewById<ViewGroup>(android.R.id.content)
surfaceContainer?.let { contentView.removeView(it) }
val container = surfaceContainer
contentView.post {
container?.let { contentView.removeView(it) }
}
surfaceContainer = null
surfaceView = null