千家信息网

如何使用Android实现关机后数据不会丢失问题

发表于:2024-09-26 作者:千家信息网编辑
千家信息网最后更新 2024年09月26日,这篇文章将为大家详细讲解有关如何使用Android实现关机后数据不会丢失问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。要实现关机后数据也不会丢失,需要使用到 A
千家信息网最后更新 2024年09月26日如何使用Android实现关机后数据不会丢失问题

这篇文章将为大家详细讲解有关如何使用Android实现关机后数据不会丢失问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

要实现关机后数据也不会丢失,需要使用到 AndroidViewModel,SaveStateHandle 和 SharePreferences 要达到的目的就是将数据保存成这个亚子

就不会出现app在异常闪退或者关机后数据的丢失了注意在使用SaveStateHandle和binding的时候需要在gradle里面设置一波

数据类

package com.example.applicationtest04;import android.app.Application;import android.content.Context;import android.content.SharedPreferences;import androidx.annotation.NonNull;import androidx.lifecycle.AndroidViewModel;import androidx.lifecycle.LiveData;import androidx.lifecycle.MutableLiveData;import androidx.lifecycle.SavedStateHandle;public class MyVIewModel extends AndroidViewModel { SavedStateHandle handle; //声明savedstatehandle 类型 String shpName = getApplication().getResources().getString(R.string.shp_name); String key = getApplication().getResources().getString(R.string.key); public MyVIewModel(@NonNull Application application, SavedStateHandle handle) { super(application); this.handle = handle; if(!handle.contains(key)){ load(); } } public LiveData getNumber(){ return handle.getLiveData(key); } public void load(){ SharedPreferences shp = getApplication().getSharedPreferences(shpName, Context.MODE_PRIVATE); int x = shp.getInt(key,0); handle.set(key,x); } public void save(){ SharedPreferences shp = getApplication().getSharedPreferences(shpName,Context.MODE_PRIVATE); SharedPreferences.Editor editor = shp.edit(); editor.putInt(key,getNumber().getValue()); editor.apply(); } public void add(int x){ handle.set(key,getNumber().getValue()+x); }}//这段代码里面有几个重要的点就是在使用handle的时候要注意使用的数据是liveData

Mainactive类

package com.example.applicationtest04;import androidx.appcompat.app.AppCompatActivity;import androidx.databinding.DataBindingUtil;import androidx.lifecycle.SavedStateVMFactory;import androidx.lifecycle.ViewModelProvider;import androidx.lifecycle.ViewModelProviders;import android.os.Bundle;import com.example.applicationtest04.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity { MyVIewModel myVIewModel; ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this,R.layout.activity_main); this.myVIewModel = ViewModelProviders.of(this,new SavedStateVMFactory(this)).get(MyVIewModel.class); binding.setData(myVIewModel); binding.setLifecycleOwner(this); } @Override protected void onPause() { super.onPause(); myVIewModel.save(); }}//这段代码的重点就是使用onPause这个声明周期的函数来调用save()函数

布局xml

0