使用LifecycleObserver的具有生命周期意识的组件如何了解屏幕方向的变化

时间:2019-12-19 10:58:26

标签: android android-lifecycle

使用LifecycleObserver例如,使生命周期感知组件非常容易。用户离开屏幕时暂停和停止MediaPlayer

但是,有什么方法让我知道生命周期是否正在经历onPauseonStop等,仅仅是因为配置发生了变化?在那种情况下,我不会对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,因此不希望将弱引用传递给片段周围。

1 个答案:

答案 0 :(得分:0)

结果表明生命周期事件函数可以接收lifecycleOwner作为参数。我不知道这是存在的,也没有找到有关它的官方文档,我的一位同事告诉了我这件事,它是可行的。

无论如何,只需检查lifecycleOwnerFragment还是Activity,然后调用activity?.isChangingConfigurationisChangingConfiguration

简而言之,这样的事情会起作用:

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop(lifecycleOwner: LifecycleOwner) {
    // Cast lifecycleOwner to Fragment or Activity and use isChangingConfiguration
}