android - Android - 在什么情况下/用例我想实现一个自定义 LifecycleOwner
问题描述
https://developer.android.com/topic/libraries/architecture/lifecycle#implementing-lco
文档说Fragments and Activities in Support Library 26.1.0 and later already implement the LifecycleOwner interface.
如果我们可以使用 Activity 或 Fragment 的 LifecycleOwner 来注册 LiveData 对象或让它调用我们注释的方法,这将非常有用
@OnLifecycleEvent(Lifecycle.Event.ON_START)
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
etc
在我们的自定义类中。
但我们也可以选择实现自定义 LifecycleOwner。在什么情况下有一个自定义 LifecycleOwner 是有意义的,考虑到它会使事情复杂化,因为现在我们必须手动跟踪生命周期事件,例如:
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
etc
?
解决方案
我想我可以自己回答这个问题,使用自定义LifecycleOwner
有意义的用例是,如果您有一个非典型的生命周期,这意味着与一个活动和片段具有不同的生命周期。
我必须使用片段在手机的锁屏上加载广告,这意味着必须在手机屏幕关闭时加载广告,而用户在按下开机按钮时会看到广告电话并打开显示屏。
这种行为很重要:广告必须在后台加载(屏幕关闭),当用户打开屏幕时,广告就在那里供用户查看。
在屏幕关闭时执行片段事务意味着事务将在onStop()
调用 Activity 之后发生,并且只能使用commitAllowingStateLoss()
.
此外,作为参数传递给片段的数据必须并且可以在屏幕关闭时更新,这也意味着当活动处于停止状态时。
因此,我必须创建一个自定义对象,LifecycleOwner
以便与一个LiveData
对象一起使用,该对象将观察应该传递给片段的数据的变化。
此自定义LifecycleOwner
实现将忽略活动的停止状态,这样LiveData
即使活动处于停止状态,也可以对数据更改做出反应。
推荐阅读
- c# - 代码正在修改错误的变量...为什么?
- kubernetes - 创建新的 pod 后如何确保旧 pod 删除完成?
- android - Wix 导航库模块不会通过运行 npm install --save react-native-navigation 添加到我的项目中
- docusignapi - DocuSign API - 信封复选框选项卡不是唯一的
- linux - 如何使用 cut 命令忽略 CSV 文件中的逗号
- rest - 带有 REST API 部署的 Azure ReactJS
- java - 如何使用 @Valid List 的 BindingResult 获取错误列表
- windows - 更改密码自定义凭据提供程序
- javascript - 在尝试在 React 中渲染组件时收到预期的赋值或函数调用,而是看到表达式 no-unused-expressions 错误
- xamarin - Xamarin - 在 VS2017 中自定义 iPhoneSimulator 列表