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
进行比较(基本相同)。文件可在此处找到: