Architecture -- LiveData

简介: 1). 简介LiveData是一个可观察的数据持有者类。 与常规observable不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,例如活动,片段或服务。
1). 简介

LiveData是一个可观察的数据持有者类。 与常规observable不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,例如活动,片段或服务。 此感知确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。

2). 依赖

官方依赖

dependencies {
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    // alternatively - just ViewModel
    implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // use -ktx for Kotlin
    // alternatively - just LiveData
    implementation "android.arch.lifecycle:livedata:$lifecycle_version"
    // alternatively - Lifecycles only (no ViewModel or LiveData).
    //     Support library depends on this lightweight import
    implementation "android.arch.lifecycle:runtime:$lifecycle_version"

    annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // use kapt for Kotlin
    // alternately - if using Java8, use the following instead of compiler
    implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

    // optional - ReactiveStreams support for LiveData
    implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"

    // optional - Test helpers for LiveData
    testImplementation "android.arch.core:core-testing:$lifecycle_version"
}

此处在使用时,我没有添加依赖,Android Studio3.0 项目中已经默认依赖

3). 优点
  • 确保UI符合数据状态
  • 没有内存泄漏
  • 活动停止不会崩溃
  • 不需要手动处理声明周期
  • 始终保持最新数据
  • 适当的配置更改
  • 共享资源
4). 创建LiveData
  • NameViewModel
class NameViewModel : ViewModel() {
  // Create LiveData Objects
  var currentName : MutableLiveData<String>? = null
    get() {
      if (null == field) {
        currentName = MutableLiveData()
      }
      return field
    }
  
}
  • LiveDataActivity
    // 初始化ViewModel
    model = ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(NameViewModel::class.java)
    // 创建观察者更新UI
    val nameObserver = Observer<String> {
      name: String? ->
      tv_show.text = name
    }
    // 观察LiveData
    model.currentName?.observe(this, nameObserver)
5). 修改
    // 修改文本
    btn_change.setOnClickListener {
      val name = "John"
      // 修改数据
      model.currentName?.value = name
    }
6). 转换LiveData
LiveData<User> userLiveData = ...;
LiveData<String> userName = Transformations.map(userLiveData, user -> {
    user.name + " " + user.lastName
});
7). 原文地址
8). 代码下载
目录
相关文章
|
9月前
|
敏捷开发 运维 Devops
如何构建高效的价值交付系统?详解项目管理中的核心要素
3分钟了解价值交付系统的组成和使用方法。
245 0
如何构建高效的价值交付系统?详解项目管理中的核心要素
|
10月前
|
监控 数据可视化 数据管理
如何通过车间看板软件优化生产管理流程?适合企业的办公神器
车间看板(Kanban)是源自日本丰田生产系统的可视化管理工具,用于提高生产效率。它通过实时展示生产进度、库存状况、任务分配和瓶颈问题等信息,帮助工人、经理和各相关人员更好地协调和决策。看板的功能包括可视化生产流程、实时更新、协调工作、解决瓶颈问题和持续改进。选择合适的车间看板工具需考虑车间规模、生产复杂度和团队协作需求。常见的工具包括板栗看板、Trello、Kanbanize、Monday.com、Jira和Smartsheet。
|
Prometheus Cloud Native 算法
alertmanager集群莫名发送resolve消息的问题探究
alertmanager集群莫名发送resolve消息的问题探究
230 3
|
10月前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。
|
监控 数据挖掘
探索ERP系统的质量管理模块
探索ERP系统的质量管理模块
439 9
|
存储 人工智能 安全
大环境下AI发展迅速,如何保证AI的安全问题?
保障AI安全的关键措施包括:数据隐私保护(加密、访问控制、脱敏、共享协议)、模型安全(验证、鲁棒性、监测、更新)、用户信息保护(透明收集、匿名化、保密协议)、网络安全(实时监测、防护措施)和合规伦理(遵守法规、融入设计)。此外,安全培训和意识提升也是重要一环。多角度策略确保AI技术的安全、健康和可持续发展。
2361 0
|
机器学习/深度学习 算法 Linux
使用OpenCV在Python中进行图像处理
使用OpenCV在Python中进行图像处理
|
存储 机器学习/深度学习 分布式计算
当金融风控遇上人工智能,众安金融的实时特征平台实践
随着企业数字化转型升级,线上业务呈现多场景、多渠道、多元化的特征。数据要素价值的挖掘可谓分秒必争,业务也对数据的时效性和灵活性提出了更高的要求。在庞大分散、高并发的数据来源背景下,数据的实时处理能力成为企业提升竞争力的一大因素。今天分享的是众安金融实时特征平台实践。
639 0
当金融风控遇上人工智能,众安金融的实时特征平台实践
|
存储 JavaScript Ubuntu
Linux终端记录神器
Linux终端记录神器
118 0
|
缓存 负载均衡 Dubbo
从源码全面解析 dubbo 消费端服务调用的来龙去脉
从源码全面解析 dubbo 消费端服务调用的来龙去脉