【问题标题】:Method with @OnLifecycleEvent annotation in multiple lifecycle methods多个生命周期方法中带有@OnLifecycleEvent 注解的方法
【发布时间】:2020-05-21 00:32:51
【问题描述】:

我的片段类中有以下生命周期方法:

override fun onPause() {
        super.onPause()
        releasePlayer()
}

override fun onStop() {
        super.onStop()
        if(Util.SDK_INT >= 24){
            releasePlayer()
        }
}

如您所见,它们都调用了一个名为releasePlayer() 的方法。 现在,我想使用这两种生命周期方法,而不是将 releasePlayer() 逻辑从 Fragment 放入一个实现 LifecycleObserver 接口的单独类中。因此,无论何时触发 onStart() 或 onResume() 生命周期方法,都会调用单独类中的 releasePlayer() 代码(观察生命周期方法)。 为此,我现在有这个:

class PlayerLogic(private val lifecycleOwner: LifecycleOwner) : LifecycleObserver {

  init {
      lifecycleOwner.lifecycle.addObserver(this)
  }


  @OnLifecycleEvent(Lifecycle.Event.ON_START,Lifecycle.Event.ON_RESUME)
    private fun releasePlayer(){  // ..do some stuff }

}

但是使用@OnLifecycleEvent(Lifecycle.Event.ON_START,Lifecycle.Event.ON_RESUME) 给我一个错误,告诉我 @OnLifecycleEvent 注释只排除一个参数。

那么,当onStart()onResume() 被调用时,我怎样才能让releasePlayer() 被调用。 那可能吗 ?如果是,如何?

【问题讨论】:

    标签: android android-lifecycle


    【解决方案1】:

    复制一下

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun start() {
        releasePlayer()
    }
    
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun resume() {
        releasePlayer()
    }
    
    private fun releasePlayer() {
        // ..do some stuff
    }
    

    【讨论】:

    • 哦,不错的解决方案。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2014-08-05
    相关资源
    最近更新 更多