当前位置: 首页 > 知识库问答 >
问题:

在没有生命周期所有者的情况下使用LiveData

范福
2023-03-14

让我举一个简单的例子

class Item() {
    private lateinit var property: MutableLiveData<Boolean>

    init {
        property.value = false
    }

    fun getProperty(): LiveData<Boolean> = property

    fun toggleProperty() {
        property.value = when (property.value) {
            false -> true
            else -> false
        }
    }
}

class ItemHolder {

    private val item = Item()

    private lateinit var observer: Observer<Boolean>

    fun init() {
        observer = Observer<Boolean> { item ->
            updateView(item)
        }
        item.getProperty().observeForever(observer)
    }

    fun destroy() {
        item.getProperty().removeObserver(observer)
    }

    fun clickOnButton() {
        item.toggleProperty();
    }

    private fun updateView(item: Boolean?) {
        // do something
    }
}

共有1个答案

白泽语
2023-03-14

对我来说LiveData有两个好处:

  1. IT知道生命周期事件,并且只在订阅服务器的适当状态下(活动/片段)传递更新。
  2. 它保存上次发布的值,并用它更新新的订阅服务器。

如前所述,如果您在生命周期组件(activity/fragment)之外使用它,并且可以随时管理交付的更新,那么您可以在没有生命周期持有者的情况下使用它,否则,它迟早会导致崩溃或数据丢失。

 类似资料:
  • 本文向大家介绍fragment各种情况下的生命周期?相关面试题,主要包含被问及fragment各种情况下的生命周期?时的应答技巧和注意事项,需要的朋友参考一下 由于Fragment的生命周期与Activity的生命周期有着牵扯,所以把两者的图放到一起作为对比理解。   接下来就不同情况下的Fragment生命周期做一简单介绍: Fragment在Activity中replace 新替换的Activ

  • 我看到的所有解决方案都需要使用。但是,我想在Eclipse之外的单个文件上使用CDT解析器。那有什么办法吗?

  • 问题内容: 我正在编写一个脚本,该脚本需要确定Windows上文件所有者的用户名。 虽然我找到了使用pywin32的解决方案,但是由于我不想添加模块依赖项,因此我很犹豫使用它。 该脚本将为python 2.6编写,并且必须同时在32位和64位平台上运行。 我想知道是否有其他方法(也许使用ctypes)来确定此信息 问题答案: 以下使用ctypes进行调用。最初,它遵循问题中链接的代码片段,但通常比

  • 下面是一个资源借用的例子: fn main() { let a = 100_i32; { let x = &a; } // x 作用域结束 println!("{}", x); } 编译时,我们会看到一个严重的错误提示: error: unresolved name x. 错误的意思是“无法解析 x 标识符”,也就是找不到 x , 这是因为像很多编

  • 问题内容: 我想学习Angular 2并切换到使用它的应用程序,但是,我在使用TypeScript时遇到问题。 在当前环境中,我不能使用使用transpiler /编译器。我目前只需要运行node.js可执行文件(node.exe),而不必运行完整的node.js应用程序,也不需要运行npm。Angular 2是用TypeScript编写的,因此在将其发送到浏览器之前,需要先将其编译为JavaSc

  • 问题内容: 我从Vaadin开始,我想知道在不使用maven的情况下在NetBeans中使用此框架是否可行。原因是使用maven的项目需要很长时间才能下载依赖项,并且由于超时连接问题而无法运行。 我已经下载了“多合一”文件,并尝试按照这些README.txt文件的说明进行操作: 将除vaadin-client和vaadin-client-compiler以外的所有vaadin- *文件复制到项目中