Android 使用MutableLiveData的优势<;字符串>;过线?

Android 使用MutableLiveData的优势<;字符串>;过线?,android,kotlin,Android,Kotlin,这是我的全局对象: object FcmData { val type: String by lazy { String() } val type2: MutableLiveData<String> by lazy { MutableLiveData<String>() } } 对象FcmData{ val类型:由lazy生成的字符串{ 字符串() } val类型2:lazy提供的可变LiveData{ M

这是我的全局对象:

object FcmData {
    val type: String by lazy {
        String()
    }
    val type2: MutableLiveData<String> by lazy {
        MutableLiveData<String>()
    }
}
对象FcmData{
val类型:由lazy生成的字符串{
字符串()
}
val类型2:lazy提供的可变LiveData{
MutableLiveData()
}
}
我正在使用
类型
值来持久化一个值,该值可以由我的服务和片段更新和访问


在我的用例中应用这两种类型时有什么区别(如果有的话)?

LiveData
是一个可观察的数据持有者类。因此,当您需要跟踪该值并根据其更改运行任何操作(例如:数据绑定)时,应该使用此选项

因此,如果您只是读取/写入值而没有进行观察,则不应使用LiveData


有关

LiveData的更多信息
是一个可观察的数据持有者类。因此,当您需要跟踪该值并根据其更改运行任何操作(例如:数据绑定)时,应该使用此选项

因此,如果您只是读取/写入值而没有进行观察,则不应使用LiveData


更多关于这两种类型的信息是完全不同的,很难找到它们之间的优势

String
只是一个对象。实际上,您使用的是
delegate
,因此可以通过
Lazy
delegate访问该对象(在使用该对象时初始化该值)

在第二种情况下,使用
MutableLiveData
字符串
包装到对象中(并且
MutableLiveData
也包装在
Lazy
委托中)。无论何时更新该数据,都会通知所有观察者。重要的是,该类型来自android库,可在
android arch
library中找到

那么,这两者有什么区别呢

这两个值都是不可变的。我的意思是这些字段没有setter。但是,您可以更改
type2
的内部值,因为
MutableLiveData
具有类似
updateValue
postValue
的方法,所以它是可变值上的不可变包装器

类型中
只需延迟初始化值,不能更改它


如果您寻找
MutableLiveData
以外的其他可能性,您可以查看
kotlin std lib
中提供的
observatable
委托。该委托可以与
MutableLiveData
进行比较(基本相同)。这些文档可以在这里找到:

这些类型完全不同,很难找到它们之间的优势

String
只是一个对象。实际上,您使用的是
delegate
,因此可以通过
Lazy
delegate访问该对象(在使用该对象时初始化该值)

在第二种情况下,使用
MutableLiveData
字符串
包装到对象中(并且
MutableLiveData
也包装在
Lazy
委托中)。无论何时更新该数据,都会通知所有观察者。重要的是,该类型来自android库,可在
android arch
library中找到

那么,这两者有什么区别呢

这两个值都是不可变的。我的意思是这些字段没有setter。但是,您可以更改
type2
的内部值,因为
MutableLiveData
具有类似
updateValue
postValue
的方法,所以它是可变值上的不可变包装器

类型中
只需延迟初始化值,不能更改它

如果您寻找
MutableLiveData
以外的其他可能性,您可以查看
kotlin std lib
中提供的
observatable
委托。该委托可以与
MutableLiveData
进行比较(基本相同)。文件可在此处找到: