zoukankan      html  css  js  c++  java
  • 2.10 Jetpack LiveData部分

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

      • 确保UI与数据同步
      • 不会产生内存泄漏
      • 不会因为Activity停止而Crash
      • 不需要手动控制生命周期
     1 package com.example.livedatatest;
     2 
     3 import androidx.lifecycle.MutableLiveData;
     4 import androidx.lifecycle.ViewModel;
     5 
     6 public class ViewModelWithLiveData extends ViewModel {
     7     private static MutableLiveData<Integer> LikedNumber;
     8 
     9    /* ViewModelWithLiveData(){   //避免数据为空
    10         LikedNumber =new MutableLiveData<>();
    11         LikedNumber.setValue(0);
    12     }*/
    13 
    14 
    15     public MutableLiveData<Integer> getLikedNumber() {
    16         if(LikedNumber == null){  //避免数据为空
    17             LikedNumber =new MutableLiveData<>();
    18             LikedNumber.setValue(0);
    19         }
    20         return LikedNumber;
    21     }
    22 
    23 
    24      static public void addLinkedNumber(int n){  //+n 或者 -n
    25         LikedNumber.setValue(LikedNumber.getValue()+n);
    26     }
    27 }

     实现代码

     1 package com.example.livedatatest;
     2 
     3 import androidx.appcompat.app.AppCompatActivity;
     4 import androidx.lifecycle.Observer;
     5 import androidx.lifecycle.ViewModelProvider;
     6 import androidx.lifecycle.ViewModelProviders;
     7 
     8 import android.os.Bundle;
     9 import android.view.View;
    10 import android.widget.ImageButton;
    11 import android.widget.TextView;
    12 
    13 public class MainActivity extends AppCompatActivity {
    14     ViewModelWithLiveData viewModelWithLiveData;
    15     TextView textView;
    16     ImageButton button1,button2;
    17 
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         super.onCreate(savedInstanceState);
    21         setContentView(R.layout.activity_main);
    22         textView = findViewById(R.id.textView);
    23         button1 = findViewById(R.id.imageButton);
    24         button2 = findViewById(R.id.imageButton2);
    25 
    26        viewModelWithLiveData =  ViewModelProviders.of(this).get(ViewModelWithLiveData.class);
    27        //为变量添加一个观察 观察自我 若发生变化 则呼叫下面函数 函数执行
    28        viewModelWithLiveData.getLikedNumber().observe(this, new Observer<Integer>() {
    29             @Override
    30             public void onChanged(Integer integer) {
    31                 textView.setText(String.valueOf(integer));
    32             }
    33         });
    34 
    35        button1.setOnClickListener(new View.OnClickListener() {
    36            @Override
    37            public void onClick(View v) {
    38                ViewModelWithLiveData.addLinkedNumber(1);
    39            }
    40        });
    41 
    42         button2.setOnClickListener(new View.OnClickListener() {
    43             @Override
    44             public void onClick(View v) {
    45                 ViewModelWithLiveData.addLinkedNumber(-1);
    46             }
    47         });
    48     }
    49 }
  • 相关阅读:
    mysql那些事(1)手机号与座机号码如何存储
    分享一个PHP调用RestFul接口的函数
    php sprintf用法
    HTTP状态码详解
    PHP随机生成中国人姓名的类
    PHP计算两组经纬度坐标之间的距离
    PHP根据经纬度获取在范围坐标的数据
    PHP 利用QQ邮箱发送邮件「PHPMailer」
    PHP中利用PHPMailer配合QQ邮箱实现发邮件
    修改PHP上传文件大小限制
  • 原文地址:https://www.cnblogs.com/cxy0210/p/12295736.html
Copyright © 2011-2022 走看看