ViewModelSavedState(进程在后台被杀死数据也能存活)

创建一个名为ViewModelSavedState的项目文件
1、界面设计及功能
ViewModelSavedState(进程在后台被杀死数据也能存活)_第1张图片
功能:按“+1”按钮后,文本框内容+1,进程在后台被杀死后,重新打开仍然是之前的数,而不会从0开始。
2、在build.gradle中添加依赖
ViewModelSavedState(进程在后台被杀死数据也能存活)_第2张图片

    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0'

implementation ‘androidx.lifecycle:lifecycle-extensions’
implementation ‘androidx.lifecycle:lifecycle-viewmodel-savedstate’
已存在,则将最后面的数字改成2.2.0

3、在build.gradle中添加dataBinding
ViewModelSavedState(进程在后台被杀死数据也能存活)_第3张图片

dataBinding{
            enabled true
        }

4、在com.example.viewmodelsavestate下创建新的类MyViewModel
ViewModelSavedState(进程在后台被杀死数据也能存活)_第4张图片

package com.example.viewmodelsavestate;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.SavedStateHandle;
public class MyViewModel extends ViewModel {
    private SavedStateHandle handle;
    public MyViewModel(SavedStateHandle handle){
        if(!handle.contains("NUMBER")){
            handle.set("NUMBER",0);
        }
        this.handle = handle;
    }
    public LiveData<Integer>getnumber(){
        return handle.getLiveData("NUMBER");
    }
    public void add(){
        handle.set("NUMBER",(int)handle.get("NUMBER")+1);
    }
}

5、打开activity_main.xml的code形式
在第一行代码处右键,点击“显示可用操作”,然后有一个黄色小灯泡出现,点第一个选项
在这里插入图片描述然后文件会变成如下内容
ViewModelSavedState(进程在后台被杀死数据也能存活)_第5张图片
在data之间添加如下内容

<data>
        <variable
            name="data"
            type="com.example.viewmodelsavestate.MyViewModel" />
    </data>

下方TextView中的android:text="内容"修改为

android:text="@{String.valueOf(data.getnumber())}"

Button中添加一行代码

android:onClick="@{()->data.add()}"

ViewModelSavedState(进程在后台被杀死数据也能存活)_第6张图片ViewModelSavedState(进程在后台被杀死数据也能存活)_第7张图片6、打开MainActivity.java文件

package com.example.viewmodelsavestate;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.SavedStateViewModelFactory;
import androidx.lifecycle.ViewModelProvider;
import android.os.Bundle;
import com.example.viewmodelsavestate.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;
    MyViewModel myViewModel;
    @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);
    }
}

7、结束

你可能感兴趣的:(Android学习,java,android,安卓)