【问题标题】:Observer always triggered when app come from background当应用程序来自后台时始终触发观察者
【发布时间】:2020-01-21 13:32:17
【问题描述】:

我在浏览器中的片段中使用livedata。我在onActivityCreated() 中观察了一个liveData,并将数据显示在一个列表中。到目前为止一切顺利,我没有问题。另一方面,当我将应用程序置于后台并返回查看器的任何页面时,Observer 再次被调用,我不明白为什么!请帮我理解。我什至没有查看相关片段的onResume()

【问题讨论】:

    标签: android android-livedata observers


    【解决方案1】:

    从附图中可以看出,Fragment 的生命周期与 Activity 的生命周期略有不同,Fragment 进入后台会调用以下函数:

    onPause() -> onStop() -> onDestroyView()
    

    当回调到视图时,它会调用以下函数

    onCreateView() -> onActivityCreated() ->  onStop() -> onResume()
    

    因此在 onActivityCreated() 方法中再次调用观察者。如果您希望您的观察者不再被调用,您应该将其添加到相应片段的 onCreate() 方法中。

    【讨论】:

    • 谢谢你!我现在对片段生命周期和活动有了更好的了解。我会在 OnCreate() 中尝试
    • 是的,试一试,如果成功,请返回并将此答案标记为正确。
    【解决方案2】:

    LiveData 认为观察者(由 Observer 类表示)如果其生命周期处于 STARTED 或 RESUMED 状态,则它处于活动状态。 LiveData 仅通知活动观察者有关更新。注册以观看 LiveData 对象的非活动观察者不会收到有关更改的通知。

    【讨论】:

    • 如何知道片段生命周期的状态?
    • 如果你的意思是“学习”,那么在这里试试developer.android.com/guide/components/fragments,如果你的意思是为什么会发生这种情况......当你的应用程序从后台返回时,你的片段被恢复并且你的观察者“看到” LIVEDATA '再次',
    • 那么当我将应用程序从相邻页面置于后台时,为什么我的片段没有通过onPause()
    • 你怎么知道你的片段正在经历什么状态?您是否在所有片段生命周期方法中都有大量日志记录?你看过我链接的生命周期图吗?
    猜你喜欢
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    相关资源
    最近更新 更多