Android面试题——掘金-JetPack之LiveData(3.2)
一 概述
1 | LiveData 是 Jetpack 组件之一,用于 数据存储与观察,具有 生命周期感知 和 线程安全 特性。 |
二 面试题解答(仅供参考)
2.1 什么是 LiveData?它的作用是什么?
1 | 1.概念 |
2.2 LiveData 的工作原理是什么?
1 | 1.概念 |
2.3 LiveData 和 MutableLiveData 的区别?
1-对比
对比项 | LiveData | MutableLiveData |
---|---|---|
数据修改 | 只读 | 可修改数据 |
适用场景 | UI 观察数据 | 允许修改数据 |
示例 | LiveData<String> | MutableLiveData<String> |
2-示例
1 | // 只读 LiveData |
2.4 LiveData 如何与 ViewModel 结合使用?
1 | 1.创建 ViewModel,持有 LiveData |
2.5 LiveData 如何进行线程切换?
1-对比
方法 | 作用 | 线程 |
---|---|---|
setValue(T value) | 主线程更新数据 | UI 线程 |
postValue(T value) | 子线程更新数据 | 后台线程 |
2-示例:子线程更新 LiveData
1 | new Thread(() -> { |
2.6 LiveData 解决了哪些问题?
1 | ✅ 避免内存泄漏:LiveData 绑定 LifecycleOwner,Activity 销毁时自动解绑。 |
2.7 LiveData 如何实现数据的单次消费?
1 | 问题: LiveData 默认 会在 Activity 重新创建(如屏幕旋转)后重新发送数据,导致数据重复消费。 |
2.8 如何让 LiveData 只在 onResume() 之后触发数据更新?
1.如何实现
1 | 使用 observe() 和 observeForever() |
2-表格
方法 | 生命周期感知 | 适用场景 |
---|---|---|
observe(owner, observer) | 受生命周期影响 | 适用于 UI 组件 |
observeForever(observer) | 不受生命周期影响 | 适用于全局事件 |
3-示例:
1 | 1.observeForever() |
2.9 MediatorLiveData 是什么?它有什么作用?
1 | 1.说明 |
2.10 LiveData 与 StateFlow(Kotlin 协程)对比?
对比项 | LiveData | StateFlow |
---|---|---|
线程支持 | 仅支持 setValue() / postValue() |
支持挂起函数 |
生命周期感知 | 支持 | 不支持 |
粘性事件 | 可能触发粘性事件 | 不会触发粘性事件 |
数据存储 | 只存储最后一次数据 | 需要 stateIn() 持久化数据 |
适用场景 | UI 数据更新 | Flow 响应式数据流 |
2.11 总结-LiveData 核心知识点
1 | -LiveData 适用于 UI 组件的数据存储和绑定 |
三 参考
- 掘金—知识库的大纲