Die Benutzeroberfläche von ExoPlayer PlayerView wechselt zum vorherigen Bildschirm, wenn Sie „Zurück“ drücken oder navCo
Posted: 23 Jan 2025, 05:37
Ich stehe vor einem Problem, bei dem die PlayerView von ExoPlayer nach dem Zurücknavigieren ausläuft oder auf den vorherigen Bildschirm überspringt. Dies geschieht, wenn ich die Zurück-Taste drücke oder navController.popBackStack() in einem Erstellungsbildschirm aufrufe.
Hier ist der Code für den zusammensetzbaren Bildschirm:
Das Problem:
Beim Zurücknavigieren:
Wie kann ich dieses Problem beheben und gleichzeitig das richtige Navigationsverhalten beibehalten und Problemumgehungen wie navController.navigate() vermeiden?
Zusätzlicher Kontext :
Ich verwende Jetpack Compose mit ExoPlayer für die Videowiedergabe.
Das Problem scheint mit dem Lebenszyklus oder der Entsorgung von PlayerView in AndroidView zusammenzuhängen.
Bild zeigt das Problem
Hier ist der Code für den zusammensetzbaren Bildschirm:
Code: Select all
@OptIn(ExperimentalMaterialApi::class)
@Stateless
@Composable
fun HelpVideo(@RawRes videoResource: Int,onNavIconClicked: () -> Unit,@StringRes guideTitle: Int)
{
ApplyStatusNavBarColor()
MaintenanceAppScaffold(topAppBar = {
CommonAppBar(
text = R.string.soundassist_update_interrupted_video,
isInfoButton = false,
isBackButton = false
)
})
{
val context = LocalContext.current
val exoPlayer = remember {
ExoPlayer.Builder(context).build().apply {
val videoUri = RawResourceDataSource.buildRawResourceUri(videoResource)
val mediaItem = MediaItem.fromUri(videoUri)
addMediaItem(mediaItem)
prepare()
playWhenReady = true
}
}
LaunchedEffect(exoPlayer) {
exoPlayer.awaitVideoFinish()
onNavIconClicked()
}
AndroidView(
modifier =
Modifier.fillMaxSize(),
factory = {
StyledPlayerView(context).apply {
player = exoPlayer
layoutParams =
FrameLayout.LayoutParams(
ViewGroup.LayoutParams
.MATCH_PARENT,
ViewGroup.LayoutParams
.MATCH_PARENT
)
useController = false
}
}
)
DisposableEffect(exoPlayer) {
onDispose {
exoPlayer.release()
}
}
}}
Beim Zurücknavigieren:
- Die PlayerView ist einige Sekunden lang auf dem vorherigen Bildschirm sichtbar
bevor sie verschwindet. Dies geschieht unabhängig davon, ob ich die Zurück-Taste drücke oder navController.popBackStack() verwende.
- Verwendung von navController.popBackStack() – Das Problem besteht weiterhin.
- Die einzige Problemumgehung, die ich gefunden habe, ist Aufruf von navController.navigate(GoToPreviousScreen). Dies löst zwar das
visuelle Problem, führt jedoch zu anderen navigationsbezogenen Komplikationen
und ist keine ideale Lösung.
Wie kann ich dieses Problem beheben und gleichzeitig das richtige Navigationsverhalten beibehalten und Problemumgehungen wie navController.navigate() vermeiden?
Zusätzlicher Kontext :
Ich verwende Jetpack Compose mit ExoPlayer für die Videowiedergabe.
Das Problem scheint mit dem Lebenszyklus oder der Entsorgung von PlayerView in AndroidView zusammenzuhängen.
Bild zeigt das Problem