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). 代码下载
目录
相关文章
|
6月前
|
前端开发
MVVM LiveData+DataBinding+Lifecycle+ViewModel架构
MVVM LiveData+DataBinding+Lifecycle+ViewModel架构
64 1
|
XML 存储 缓存
如何把业务代码越写越复杂? | MVP - MVVM - Clean Architecture
本文以一个真实项目的业务场景为载体,描述了经历一次次重构后,代码变得越来越复杂(you ya)的过程。
477 5
|
运维 监控 安全
Design for failure常见的12种设计思想
hello,大家好,我是张张,「架构精进之路」公号作者。 通常情况下,我们的一个请求会经过三个服务来处理。
Design for failure常见的12种设计思想
|
API Kotlin
RxJava的Single、Completable以及Maybe
RxJava的Single、Completable以及Maybe
281 0
RxJava的Single、Completable以及Maybe
|
Android开发 Kotlin Java
Architecture -- ViewModel
1). 简介 ViewModel类旨在以生命周期意识的方式存储和管理UI相关数据。 ViewModel类允许数据在配置更改(例如屏幕旋转)后继续存在。 Android框架管理UI控制器的生命周期,例如活动和片段。
975 0
|
Kotlin Java
Architecture -- Lifecycle
1). 简介 生命周期感知组件执行操作以响应另一个组件(例如活动和片段)的生命周期状态的更改。 这些组件可帮助您生成更易于组织且通常更轻量级的代码,这些代码更易于维护。
968 0
|
数据库 数据库管理 缓存
Architecture -- Room
1). 简介 Room persistence库为SQLite提供了一个抽象层,以便在利用SQLite的全部功能的同时实现更强大的数据库访问。 该库可帮助您在运行应用程序的设备上创建应用程序数据的缓存。
892 0
|
前端开发 C# 安全
[译]WPF MVVM 架构 Step By Step(5)(添加actions和INotifyPropertyChanged接口)
原文:[译]WPF MVVM 架构 Step By Step(5)(添加actions和INotifyPropertyChanged接口)   应用不只是包含textboxs和labels,还包含actions,如按钮和鼠标事件等。
856 0
|
前端开发 C#
WPF MVVM 架构 Step By Step(6)(把actions从view model解耦)
原文:WPF MVVM 架构 Step By Step(6)(把actions从view model解耦)   到现在为止,我们创建了一个简单的MVVM的例子,包含了实现了的属性和命令。我们现在有这样一个包含了例如textbox类似的输入元素的视图,textbox用绑定来和view model联系,像点击button这样的行为用命令来联系。
1552 0