使用 LifecycleObserver
制作生命周期感知组件非常容易,例如当用户离开屏幕时暂停和停止 MediaPlayer
。
但是有什么方法可以让我知道生命周期是否正在经历 onPause
、onStop
等,仅仅是因为配置更改正在发生?在那种情况下,我不会对 MediaPlayer
做任何事情。在 Fragment
中有 activity?.isChangingConfiguration()
但在 LifecycleObserver
中我没有得到这样的信息吗?
class AudioPlayerLifecycleObserver(private val mediaPlayer: MediaPlayer) : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause() {
// Media player will pause even if the screen is just changing orientation
mediaPlayer.pause()
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop() {
// Media player will stop even if the screen is just changing orientation
mediaPlayer.stop()
}
}
媒体播放器停止和暂停仅用于演示目的。
请注意,考虑的架构是 MVVM,因此不希望传递对 fragment 的弱引用。
最佳答案
事实证明,生命周期事件函数可以接收 lifecycleOwner
作为参数。我不知道这个存在,没有找到关于它的官方文档,我的一个同事告诉我这个并且它有效。
无论如何,只需检查 lifecycleOwner
是 Fragment
还是 Activity
,然后调用 activity?.isChangingConfiguration
或 isChangingConfiguration
。
简而言之,这样的事情会起作用:
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop(lifecycleOwner: LifecycleOwner) {
// Cast lifecycleOwner to Fragment or Activity and use isChangingConfiguration
}
关于android - 使用 LifecycleObserver 的生命周期感知组件如何感知屏幕方向变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59408310/