ViewModel是什么?
ViewModel 是在2017年谷歌I/O大会上,推出ViewModel组件,用来规范开发者实现MVVM,是以感知生命周期的形式来存储和管理视图相关的数据。
ViewModel主要特点:
(1) 当Activity被销毁时,我们要用onSaveInstanceState方法恢复数据,不适用大量数据,而ViewModel适用于大量数据
(2) ViewModel将数据逻辑与视图控制器分离开来,避免视图控制器过于臃肿
MyViewModel.java
package com.zhoujian.lifecycledemo.model;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class MyViewModel extends ViewModel {
private MutableLiveData<String> data;
public LiveData<String> getData() {
if (data == null) {
data = new MutableLiveData<>();
addData();
}
return data;
}
private void addData() {
data.postValue("测试数据");
}
}
SecondActivity.java
package com.zhoujian.lifecycledemo.activity;
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.zhoujian.lifecycledemo.R;
import com.zhoujian.lifecycledemo.model.MyViewModel;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
MyViewModel myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
myViewModel.getData().observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
Log.e("zhoujian", "s = " + s);
}
});
}
}
01-15 19:25:50.104 22688-22688/com.zhoujian.lifecycledemo E/zhoujian: s = 测试数据
ViewModel 的生命周期
Activity的生命周期不断变化,经历了被销毁重新创建,而ViewModel生命周期没有发生变化