LiveData

1、什么是 LiveData

答案

LiveData 是可观察、生命周期感知的数据持有者;

能存储单个数据,可被观察者监听,自动感知 Activity/Fragment 生命周期,只给前台活跃页面发数据,页面销毁自动解绑,天然防内存泄漏。

2、LiveData 优点

答案

  1. 生命周期感知,自动防内存泄漏
  2. 页面销毁自动移除观察者,避免空指针;
  3. 数据粘性,页面重建自动恢复最新数据
  4. 不用手动管理注册和解绑,简化代码。

3、LiveData 和 MutableLiveData 区别

答案

  • LiveData:只读,只能观察,不能修改值;
  • MutableLiveData :继承 LiveData,可读可改,有 setValue()postValue();开发规范:ViewModel 暴露 LiveData ,内部用 MutableLiveData,对外隐藏修改权限。

4、setValue 和 postValue 区别

答案

  • setValue:主线程调用,直接赋值;
  • postValue :子线程调用,抛到主线程更新;多次连续 postValue 可能只保留最后一次值。

5、LiveData 为什么不会内存泄漏

答案

底层依赖 Lifecycle,感知页面生命周期;

页面进入 DESTROYED 状态,LiveData 自动主动移除观察者,不再持有页面引用,杜绝泄漏。

6、LiveData 粘性事件是什么

答案

新观察者注册后立马收到当前最新值,就算数据先更新、后订阅也能拿到;

场景:屏幕重建自动恢复数据;

弊端:需要单次弹窗、单次跳转时会重复触发,需要防粘性处理。

7、怎么解决 LiveData 粘性事件

答案

  1. Event 包装类 封装事件,消费过后标记已处理;
  2. SingleLiveData 自定义只发一次事件;
  3. 使用 SharedFlow 替代 LiveData 做单次事件。

8、LiveData 能不能背压、适合做流式吗

答案

不适合。

LiveData 适合状态常驻(页面数据、UI 状态);

不适合频繁连续事件、按钮点击、信息流,这类用 Kotlin Flow / SharedFlow

9、LiveData 原理简单说

答案

基于 Lifecycle 感知页面状态;观察者绑定生命周期,只有页面处于 RESUMED 活跃状态 才分发数据;

页面销毁自动解绑,数据变化主动回调给观察者。

10、多个 Fragment 怎么通过 LiveData 通信

答案

共享同一个 ViewModel,ViewModel 里放 LiveData;

多个 Fragment 观察同一个 LiveData,数据一变全部自动回调,解耦通信。

面试一句话终极总结

LiveData 是生命周期感知的可观察数据容器,自动绑定 Lifecycle,只给前台活跃页面分发数据,页面销毁自动解绑防泄漏;区分 MutableLiveData 可修改、LiveData 只读;有粘性特性适合 UI 状态保存,不适合一次性事件,一次性事件可用事件包装类或 Flow 替代。

相关推荐
天空之城--10 分钟前
Android逆向安全合规接单指南
android·安全
消失的旧时光-19432 小时前
Android 系统层扫盲 09:AMS、ATMS、WMS、PMS 到底分别管什么?
android·wms·pms·ams·aosp·atms
Godikov2 小时前
Android 系统级设备应用踩坑实录:sharedUserId 签名、SDK 授权失败 -4、开机自启与 U 盘 OTA 升级
android
IT毕设实战小研5 小时前
基于大数据的国内主要农作物产量趋势分析与可视化
android·java·大数据·django·课程设计
企业数字化笔记7 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
龙之叶7 小时前
Android出海系列-GMS认证介绍
android
潮族大Z7 小时前
Android性能优化:启动、内存、卡顿的一站式排查手册
android
事圆则缓8 小时前
从suspend字节码到 Retrofit 协程桥:挂起函数识别与恢复
android·retrofit
杉氧10 小时前
RN 性能调优指南:重渲染(Re-renders)控制与长列表(FlatList)优化
android·前端·react native
Coffeeee10 小时前
claude-video 一个让你的Agent拥有看视频能力的Skill
android·人工智能·aigc