使用 LifecycleObserver 的生命周期感知组件如何感知屏幕方向变化
How can lifecycle aware components using LifecycleObserver be aware of screen orientation changes
使用 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,因此不希望传递对片段的弱引用。
原来生命周期事件函数可以接收 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
}
使用 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,因此不希望传递对片段的弱引用。
原来生命周期事件函数可以接收 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
}