jetpack-------ViewModelSavedState(即使进程在后台被系统杀死数据也能存活)
ViewModel在activity重新创建(进入后台,屏幕翻转,语言切换)数据都不会丢失,但是当后台把ViewModel杀死进程之后,ViewModel也会被杀死,UI数据全没了,咋办?
用ViewModelSavedState。
MyViewModel
package com.example.viewmodelsavedstate; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; public class MyViewModel extends ViewModel { private MutableLiveData<Integer> number; public MutableLiveData<Integer> getNumber() { if (number == null){ number = new MutableLiveData<>(); number.setValue(0); } return number; } public void add(){ number.setValue(number.getValue()+1); } }
之前我们的解决方法是使用Bundle:
package com.example.viewmodelsavedstate; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import androidx.lifecycle.ViewModelProvider; import android.os.Bundle; import com.example.viewmodelsavedstate.databinding.ActivityMainBinding; public class MainActivity extends AppCompatActivity { MyViewModel myViewModel; ActivityMainBinding mainBinding; final static String KEY_NUMBER = "my_number"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main); myViewModel = new ViewModelProvider(this,new ViewModelProvider.NewInstanceFactory()).get(MyViewModel.class); mainBinding.setData66(myViewModel); mainBinding.setLifecycleOwner(this); //**********进入后台之后还能获取到之前保存在Bundle的值*************************** if (savedInstanceState != null){ String string = savedInstanceState.getString(KEY_NUMBER); myViewModel.getNumber().setValue(Integer.valueOf(string)); } } //通过Bundle这个对象保存数据,即使杀了后台也没关系 @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putString(KEY_NUMBER, String.valueOf(myViewModel.getNumber())); } }
但是我们现在感觉b格不够,现在用ViewModel Savedstate 算了懒得学了,用上面那个得了
首先还是导入依赖以及android{}里面写
dataBinding{
    enabled true
}
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.0-alpha01'
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号