使用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,因此不希望将弱引用传递给片段周围。
答案 0 :(得分:0)
结果表明生命周期事件函数可以接收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
}