[转]LiveData配合ViewModel简单使用

0 原文 https://blog.csdn.net/u011810352/article/details/81334339
【[转]LiveData配合ViewModel简单使用】LiveData是Google推出的一系列的框架组件的其中一个,它是一个可以被观察的数据持有类,能够感知Activity、Fragment等组件的生命周期。
一个观察者去观察LiveData后,当观察者的生命周期处于STARTED或RESUMED状态时(即onStart()、onResume()、onPause()),LiveData的数据发生变化,则会通知观察者;若观察者处于其他状态,即使LiveData的数据发生变化,也不会发出通知。
正是由于这一特性,因此LiveData可以做到仅在组件处于活跃状态时才进行更新UI的操作。
1. 添加依赖

dependencies { //... def lifecycle_version = "1.1.1" //ViewModel 和 LiveData implementation "android.arch.lifecycle:extensions:$lifecycle_version" }

2. 简单使用demo 2.1 新建一个 ViewModel
package com.wu.su.livedatastudy; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; public class TestModel extends ViewModel {// MutableLiveData 为可变数据 private MutableLiveData instans; public MutableLiveData getInstans() { if (instans == null) { instans = new MutableLiveData<>(); }return instans; }}

2.2 调用实例
package com.wu.su.livedatastudy; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import android.os.Bundle; import android.util.Log; import java.util.Observable; public class MainActivity extends AppCompatActivity {private final static String TAG = "shz_debug"; private TestModel testModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initListener(); // 提供了setValue(T)(主线程使用)和postValue(T)(子线程使用)两个方法来修改数据 testModel.getInstans().setValue("onCreate"); }private void initListener() { // testModel = new TestModel(); /** * 使用 ViewModel 来创建对象 * ViewModel跟普通Model流程都是一样的,只是创建对象时不一样而已。 * Google建议LiveData配合ViewModel一起使用 */ testModel = ViewModelProviders.of(this).get(TestModel.class); testModel.getInstans().observe(this, new Observer() { @Override public void onChanged(String s) { Log.d(TAG, s); } }); }@Override protected void onStart() { super.onStart(); testModel.getInstans().setValue("onStart"); }@Override protected void onResume() { super.onResume(); testModel.getInstans().setValue("onResume"); }@Override protected void onStop() { super.onStop(); testModel.getInstans().setValue("onStop"); }@Override protected void onDestroy() { super.onDestroy(); testModel.getInstans().setValue("onDestroy"); }}

2.3 运行结果
2019-12-22 22:31:09.188 14071-14071/com.wu.su.livedatastudy D/shz_debug: onStart 2019-12-22 22:31:09.189 14071-14071/com.wu.su.livedatastudy D/shz_debug: onResume

    推荐阅读