当使用Savedstate保存数据之后,后台进程关闭,数据也会得到保留
上图是由B站UP主longway777制作
首先在build.gradle文件中添加一下依赖
android {
dataBinding.enabled = true
...
}
dependencies {
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0'
.......
}
ViewModel-Savedstate 版本 2.2.0已经发布,所以B站UP主longway777中的依赖,我改为了上述版本
然后创建一个类继承ViewModel,在里面有有个SavedStateHandle类型的handle用来保存数据
MyViewModel.java
package com.example.viewmodelrestore;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.SavedStateHandle;
import androidx.lifecycle.ViewModel;
public class MyViewModel extends ViewModel {
private SavedStateHandle handle;
public MyViewModel(SavedStateHandle handle) {
if (!handle.contains("KEY_NUMBER")) {
handle.set("KEY_NUMBER", 0);
}
this.handle = handle;
}
public LiveData<Integer> getNumber() {
return handle.getLiveData("KEY_NUMBER");
}
public void add() {
handle.set("KEY_NUMBER", (int)handle.get("KEY_NUMBER") + 1);
}
}
最后在mainactivity中实例化和绑定参数。
Mainactivity.java
public class MainActivity extends AppCompatActivity {
MyViewModel myViewModel;
ActivityMainBinding binding;
public final static String KEY_NUMBER = "my_number";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
myViewModel = new ViewModelProvider(this, new SavedStateViewModelFactory(getApplication(),this)).get(MyViewModel.class);
binding.setData(myViewModel);
binding.setLifecycleOwner(this);
}
}
UI界面