LiveData是一个可观察的数据持有者类,但和其他的可观察对象不同,它与生命周期相关联,比如Activity的生命周期。LiveData能确保仅在Activity处于活动状态下才会更新。也就是说当观察者处于活动状态,才会去通知数据更新。
个人认为这是避免内存泄漏一个很实用的操作。
官方说明LiveData的优点

    • 确保UI与数据同步
    • 不会产生内存泄漏
    • 不会因为Activity停止而Crash
    • 不需要手动控制生命周期
 package com.example.livedatatest;

 import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel; public class ViewModelWithLiveData extends ViewModel {
private static MutableLiveData<Integer> LikedNumber; /* ViewModelWithLiveData(){ //避免数据为空
LikedNumber =new MutableLiveData<>();
LikedNumber.setValue(0);
}*/ public MutableLiveData<Integer> getLikedNumber() {
if(LikedNumber == null){ //避免数据为空
LikedNumber =new MutableLiveData<>();
LikedNumber.setValue(0);
}
return LikedNumber;
} static public void addLinkedNumber(int n){ //+n 或者 -n
LikedNumber.setValue(LikedNumber.getValue()+n);
}
}

实现代码

 package com.example.livedatatest;

 import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders; import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView; public class MainActivity extends AppCompatActivity {
ViewModelWithLiveData viewModelWithLiveData;
TextView textView;
ImageButton button1,button2; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
button1 = findViewById(R.id.imageButton);
button2 = findViewById(R.id.imageButton2); viewModelWithLiveData = ViewModelProviders.of(this).get(ViewModelWithLiveData.class);
//为变量添加一个观察 观察自我 若发生变化 则呼叫下面函数 函数执行
viewModelWithLiveData.getLikedNumber().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
textView.setText(String.valueOf(integer));
}
}); button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewModelWithLiveData.addLinkedNumber(1);
}
}); button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewModelWithLiveData.addLinkedNumber(-1);
}
});
}
}

2.10 Jetpack LiveData部分的更多相关文章

  1. Jetpack—LiveData组件的缺陷以及应对策略 转至元数据结尾

    一.前言 为了解决Android-App开发以来一直存在的架构设计混乱的问题,谷歌推出了Jetpack-MVVM的全家桶解决方案.作为整个解决方案的核心-LiveData,以其生命周期安全,内存安全等 ...

  2. Jetpack系列:LiveData入门级使用方法

    Android APP开发中,开发者们都想有一个公共的组件,可以实现后台数据的监听,同时实时更新到UI进行显示,从而大大简化开发过程.Google针对这一开发需求,提供了Jetpack LiveDat ...

  3. 2020年在项目中使用MVVM正确姿势,你用对了吗?

    最近看到了几篇与 Jetpack MVVM 有关到文章,使我不禁也想淌一下这场混水.我是在 2017 年下半年接触的 Jetpack 的那套开发工具,并且后来一直将其作为开发的主要框架.在这段时间的使 ...

  4. Android Jetpack基本架构之ViewModel+LiveData+DataBinding入门

    前提:导入所有依赖,开启DataBinding app的build.gradle android { defaultConfig { ... dataBinding { enabled true } ...

  5. Jetpack架构组件学习(2)——ViewModel和Livedata使用

    要看本系列其他文章,可访问此链接Jetpack架构学习 | Stars-One的杂货小窝 原文地址:Jetpack架构组件学习(2)--ViewModel和Livedata使用 | Stars-One ...

  6. Jetpack 架构组件 LiveData ViewModel MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. Android Jetpack组件 - ViewModel,LiveData使用以及原理

    本文涉及的源码版本如下: com.android.support:appcompat-v7:27.1.1 android.arch.lifecycle:extensions:1.1.1 android ...

  8. Jetpack的ViewModel与LiveData

    本文基于SDK 29 一.ViewModel与LiveData的作用: 1.viewModel: 数据共享,屏幕旋转不丢失数据,并且在Activity与Fragment之间共享数据. 2.LiveDa ...

  9. 感知生命周期的数据 -- LiveData

    感知生命周期的数据 -- LiveData 零. 前言 上篇文章<万物基于Lifecycle> 介绍了整个Lifecycle体系的基石,今天这篇文章咱们来看看Jetpack给我们带来的活着 ...

随机推荐

  1. Springboot项目的接口防刷(实例)

    技术要点:springboot的基本知识,redis基本操作, 首先是写一个注解类: import java.lang.annotation.Retention; import java.lang.a ...

  2. php:数据库封装类

    <?phpclass DBDA{    public $host="localhost";    public $uid="root";    publi ...

  3. Sweet Round 1题解

    感谢各位参赛者,所有的题解如下: T1 syx的奖励 这题明显是签到题了吧,随便猜猜结论就A掉了 先说怎么做吧,把所有的可走的数gcd起来,然后再与n求gcd 如果为1,则输出n,若不为1,则输出-1 ...

  4. 使用elk+redis搭建nginx日志分析平台(引)

    http://www.cnblogs.com/yjf512/p/4199105.html elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎 ...

  5. 初级入门 --- 认识 WebGL

    WebGL 是什么? WebGL 是一组基于 JavaScript 语言的图形规范,浏览器厂商按照这组规范进行实现,为 Web 开发者提供一套3D图形相关的 API. 这些 API 能够让 Web 开 ...

  6. UVALive 6853(dp)

    题意:已知有n个城市,某歌手每月进行一场演唱会,共持续c个月,可连续两个月在同一个城市.城市间的路费已给出,且已知每个城市在第k(1<=k<=c)个月举办演唱会的所得利润,求最终的最大利润 ...

  7. Codestorm:Counting Triangles 查各种三角形的个数

    题目链接:https://www.hackerrank.com/contests/codestorm/challenges/ilia 这周六玩了一天的Codestorm,这个题目是真的很好玩,无奈只做 ...

  8. DirectX9完全面向对象框架

    #pragma once #define UNICODE //Direct3D lib #include<d3d9.h> #include<d3dx9.h> #pragma c ...

  9. spark aggregate算子

    spark aggregate源代码 /** * Aggregate the elements of each partition, and then the results for all the ...

  10. Centos7安装Redis-单节点

    1.安装 gcc 编译环境 由于 Redis 使用 C 语言开发,所以官网下载的源码需要进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装. ​[root@CentOS ~]# yu ...