Android jetpack 之 LiveData

本文介绍了Android Jetpack中的LiveData,一种感知组件生命周期并仅更新活跃状态组件的可观察数据存储器。它通常与ViewModel配合使用。文章详细阐述了如何创建和使用LiveData,包括观察者注册、工作原理、活性状态检测以及如何扩展和转换LiveData。
摘要由CSDN通过智能技术生成

首先,LiveData是什么
LiveData是一种可以被观察的数据存储器类,它可以感知其他组件(比如Activity,Fragment)的生命周期,并只更新处于活跃状态的组件。当我们的应用组件处于STARTED或RESUMED状态,LiveData则会认为该组件处于活跃状态。

开始使用LiveData,LiveData一般搭配ViewModel一起使用
首先我们会创建一个ViewModel,在ViewModel里面在创建LiveData,并提供getter方法进行访问。

class NameViewModel : ViewModel() {
    //LiveData是一个抽象类,一般使用它的 MutableLiveData 实现
    val currentName: MutableLiveData<String> by lazy {
        MutableLiveData<String>()
    }
}

接着在Activity的onCreate()方法中获取我们的NumViewModel (在依赖了Android KTX 中的 Fragment KTX模块后,可以直接使用viewModels和activityViewModels属性委托绑定到ViewModel),接着为LiveData注册观察者。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    //获取ViewModel对象
    val model = ViewModelProvider(this,
        ViewModelProvider.NewInstanceFactory()).get(NameViewModel::class.java)
    //创建观察者对象
    val nameObserver = Observer<String> { name ->
        //更新UI
    }
    //通过observe()来注册观察者
    model.currentName.observe(this, nameObserver)
}

在注册观察者之后系统会立即调用onChange()方法,来提供currentName中的最新值,如果LiveData对象尚未在currentName中设置值,则onChange()方法不会被调用。
现在已经创建了LiveData对象并且设置了观察者。我们只需要更新LiveData对象就可以完成对onChange()方法的调用。LiveData提了setValue(T)和postValue(T)两个方法来更新值,第一个用来在主线程上使用,第二个用来在工作线程上使用。

button.setOnClickListener {
    model.currentName.setValue("乌鸡哥")
}

LiveData 是怎么工作的
首先我们看下LiveData是如何注册一个观察者的

@MainThread
public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer) {
    //该方法一定要在主线程上调用
    assertMainThread("observe&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值