zoukankan      html  css  js  c++  java
  • Android Jetpack -- LiveData篇

    LiveData是一个可观察的数据持有者类,不过它和其他的可观察对象不同,它会与生命周期相关联,比如Activity的生命周期,LiveData能确保仅在Activity处于活动状态下才会更新。也就是说当观察者处于活动状态,才会去通知数据更新。
    个人觉得这是为了避免内存泄漏,可以说是很实用了,因为要想避免内存泄漏,必须要感知到生命周期,而原本并没有提供额外的方法,像Glide采用了一个透明的Fragment来感知Activity的生命周期,这虽然是一个可行的方法,但总感觉并不是一个最优的方法。
    下面是官方说明的使用LiveData的优点

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

    下面便是LiveData在MVVM中的角色

    LiveData的使用

    LiveData是配合ViewModel使用的

    ViewModelWithLiveData.java

    package com.example.livedatatest;
    
    import androidx.lifecycle.MutableLiveData;
    import androidx.lifecycle.ViewModel;
    
    public class ViewModelWithLiveData extends ViewModel {
        private MutableLiveData<Integer> LikedNumber;
    
        public MutableLiveData<Integer> getLikedNumber() {
            if (LikedNumber == null) {
                LikedNumber = new MutableLiveData<>();
                LikedNumber.setValue(0);
            }
            return LikedNumber;
        }
        public void addLikedNumber(int n) {
            LikedNumber.setValue(LikedNumber.getValue() + n);
        }
    }

    MainActivity.java

    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 imageButtonLike,imageButtonDisLike;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView.findViewById(R.id.textView);
            imageButtonLike.findViewById(R.id.imageButton);
            imageButtonDisLike.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));
                }
            });
    
            imageButtonLike.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    viewModelWithLiveData.addLikedNumber(1);
                }
            });
    
            imageButtonDisLike.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    viewModelWithLiveData.addLikedNumber(-1);
                }
            });
        }
    }
  • 相关阅读:
    javascript连接SQL Server 2014进行增删改查(适用于IE浏览器)
    javascript连接远程数据库SQL Server 2014(只能在IE浏览器上运行)
    HTML基础:文本列表实例2(9)
    HTML基础:文本列表实例1(8)
    一个简单的例子:javascript实现日期的比较(3)
    一个简单的例子:javascript设置默认日期范围为最近40天(2)
    一个简单的例子:通过javascript输出所选择的日期(1)
    HTML基础:文本列表(7)
    HTML基础:文本的样式标签(6)
    HTML基础:文本的排版格式(5)
  • 原文地址:https://www.cnblogs.com/best-hym/p/12195493.html
Copyright © 2011-2022 走看看