首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

细说Jetpack中那些LiveData们

最后一个参数是一个带接收者的Lambda表达式,这个lambda表达式的接收者是LiveDataScope,可以直接在代码块中(1处)中调用其emit方法,向LiveData发值。...block中的代码会在LiveData标为活跃状态后只执行,且正常情况下只会执行一次。LiveData的非活跃到活跃状态的切换发生在注册在其身上的活跃的observer从0变为1时。...如果runningJob不为空也不会执行。...当LiveData再次处于活跃状态时也不会执行了。 一旦任务被取消成功注释8处,runningJob会被置空,注释5处 当LiveData重新处于活跃状态时block代码块就会被重新执行。...Source实现了Observer,其onChanged方法中会有天剑的调用addSource方法传入的observer(onChanged)的方法。

65120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    LiveData 还有学习的必要吗?—— Jetpack 系列(2)

    ,避免产生空指针异常或不必要的性能损耗;当宿主生命周期不低于活跃状态(STAETED)时,LiveData 会重新尝试回调数据,确保观察者接收到最新的数据。...Lifecycle#removeObserver() // AlwaysActiveObserver 为空实现 removed.detachObserver(); removed.activeStateChanged...使用 setValue() 方法进行同步设置数据(必须在主线程调用),需要注意的是,设置数据后并不一定会回调 Observer#onChanged() 分发数据,而是需要同时满足 2 个条件: 条件...((T) mData); } 总结一下回调 Observer#onChanged() 的情况: 1、注册观察者时,观察者绑定的生命处于活跃状态,并且 LiveData 存在已设置的旧数据; 2、调用...为什么 Google 要把 LiveData 设计为粘性呢?

    3.6K10

    【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

    数据维护的一个补充 ; 在 ViewModel 中使用了 LiveData 后 , 先调用 LiveData#observe 函数 为 LiveData 设置 androidx.lifecycle.Observer...类型 , LiveData 的泛型为 原来的查询方法的返回值类型 ; Dao 查询方法的返回值由 List 变为 LiveData> ; Room 框架中...> 查询方法 , 只能在数据库数据发生改变被动回调时才能查询出数据 , 如果主动调用该方法查询数据库 , 会返回一个空数据的 LiveData ; 如果想要手动主动查询数据库 , 需要保留非 LiveData...ViewModel 中的数据库查询方法 获取的 LiveData , 首次设置 Observer 监听 , 会回调一次, 首次查询时 , 数据库为空 , 没有查到任何数据 , 最终得到 [] 打印结果...Dao 中返回 LiveData 的接口方法查询数据库 , 返回 androidx.room.RoomTrackingLiveData@8726677 , 但其中的数据为空 ; 调用 Dao 中返回

    1K20

    Android面试题到处攒,一到面试就不知深浅忘个干净?快来看看这份超详细整理!

    { } }) liveData.setVaile("xixi") //子线程调用 liveData.postValue("test") 13、LiveData 为什么被设计出来,解决了什么问题...自动判断生命周期并回调方法 如果观察者的生命周期处于 STARTED 或 RESUMED状态,则 LiveData 会认为该观察者处于活跃状态,就会调用onActive方法,否则,如果 LiveData...回调方法,也就是onChanged方法。通过改变存储值,来通知到观察者也就是调用onChanged方法。...否则正常通知到观察者的onChanged方法。 当然,如果想任何时候都能监听到,都能获取回调,调用observeForever方法即可。...ViewHolderholder, int position, List payloads) { if (payloads.isEmpty()) { // payloads为空

    1.5K20

    【Jetpack】使用 Room 中的 Migration 升级数据库 ( 修改 Entity 实体类 - 更改数据模型 | 创建 Migration 迁移类 | 修改数据库版本 | 代码示例 )

    二、Room#Migration 迁移工具使用要点 本章节中以新增一个数据库表字段为例 , 在 【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 |...student add column sex integer not null default 1 该 SQL 语句的作用是 向 “student” 表中添加一个名为 “sex” 的整数类型列 , 该列不允许为空...add column sex integer 表示 要添加的新列名为 “sex” , 数据类型为 integer , 即整数类型 ; not null 表示该新列不允许为空值,即在插入或更新数据时,必须为该列提供非空值...MIGRATION_1_2: Migration = object : Migration(1, 2) 4、数据库更新的情况 如果之前运行了 【Jetpack】Room + ViewModel + LiveData...allowMainThreadQueries() // Room 原则上不允许在主线程操作数据库 // 如果要在主线程操作数据库需要调用该函数

    1.4K30

    Android程序员该如何去手写事件通信方案LiveDataBus

    LiveData改成了abstract,在此之前它是被定义为public,可以访问外国网站的可以看下这里的修改记录 MediatorLiveData继承自MutableLiveData,MutableLiveData...Observer接口就是观察者,其中定义了LiveData数据变化的回调方法onChanged()。...当调用LiveData的setValue()、postValue()方法后,通知观察者更新数据。...在LiveData中的数据变化,通过postValue(可后台线程)或者setValue(主线程)设置后,将触发Observer的onChanged,开发者只需onChanged等待最新数据回调即可。...使用者不用显示调用反注册方法。 由于LiveData具有生命周期感知能力,所以LiveDataBus只需要调用注册回调方法,而不需要显示的调用反注册方法。

    1.4K10
    领券