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
推荐阅读
- 多渠道|Android 组件化在公用Module里实现多渠道打包配置
- Android基础|EventBus源码分析之订阅-发布模型
- Android基础|Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)
- HandlerThread(子线程也可以有消息传递机制)
- android ViewId自动注解使用详解(ViewInject)
- Android|Android属性动画 Property animation
- JNI与底层调用-1
- #|FutureTask 使用场景介绍
- #|静态内部类创建单例的实现和优点
- #|View的三大流程是什么,加以简单说明