【问题标题】:How do i get the LifecycleOwner for livedata object that is not in an activity如何获取不在活动中的 livedata 对象的 LifecycleOwner
【发布时间】:2021-12-28 19:56:07
【问题描述】:

我正在尝试覆盖 firebase 消息,我需要在一个不在活动中的类中使用实时数据对象,但我不知道如何获取 LifecycleOwner。

        currentUserIDLiveData.observe(this , androidx.lifecycle.Observer{
            println("THE CURRENT USER ID IS " + it)
        })

【问题讨论】:

  • 这取决于。您是在尝试获取 Fragment、Dialog、像 Manager 这样的随机类的生命周期所有者,还是究竟是什么?
  • Afaik FirebaseMessagingService 不会扩展 LifecycleService,因此您可以在 LiveData 上使用 observeForever 并在服务的 onDestroy 中删除观察者。
  • 如果您使用observeForever,请确保您创建了一个您持有的Observer 对象,并在添加和删除观察者时传入。如果您使用 lambda,它会转换为 SAM,每次都将其视为不同的对象,因此原始对象不会被删除,最终会导致内存泄漏

标签: android firebase kotlin android-livedata


【解决方案1】:

如果你想永远观察它,而它是否会导致内存泄漏对你来说并不重要,你可以使用 liveData 的 observeForever 方法。但是如果需要传递生命周期所有者并且您不是像活动和片段这样的共同所有者,您应该基于它的基本接口实现您的自定义生命周期所有者并将其传递给 liveData 。实现起来并不难,只需要知道你的组件什么时候活跃,什么时候不活跃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2013-08-01
    • 2019-06-20
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多