Android实现关机后数据不会丢失问题

作者:毛少雄 时间:2021-06-08 18:54:47 

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

Android实现关机后数据不会丢失问题

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

Android实现关机后数据不会丢失问题

数据类


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<Integer> 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


<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
 <variable
  name="Data"
  type="com.example.applicationtest04.MyVIewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity">
 <TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@{String.valueOf(Data.getNumber())}"
  android:textColor="@color/colorPrimaryDark"
  android:textSize="36sp"
  app:layout_constraintBottom_toBottomOf="parent"
  app:layout_constraintHorizontal_bias="0.497"
  app:layout_constraintLeft_toLeftOf="parent"
  app:layout_constraintRight_toRightOf="parent"
  app:layout_constraintTop_toTopOf="parent"
  app:layout_constraintVertical_bias="0.324" />
 <Button
  android:id="@+id/button"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginStart="8dp"
  android:layout_marginTop="8dp"
  android:layout_marginEnd="8dp"
  android:layout_marginBottom="8dp"
  android:text="@string/buttonPlus"
  android:onClick="@{()->Data.add(1)}"
  app:layout_constraintBottom_toBottomOf="parent"
  app:layout_constraintEnd_toEndOf="parent"
  app:layout_constraintHorizontal_bias="0.182"
  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintTop_toTopOf="parent"
  app:layout_constraintVertical_bias="0.499" />
 <Button
  android:id="@+id/button2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginStart="8dp"
  android:layout_marginTop="8dp"
  android:layout_marginEnd="8dp"
  android:layout_marginBottom="8dp"
  android:text="@string/buttonSub"
  android:onClick="@{()->Data.add(-1)}"
  app:layout_constraintBottom_toBottomOf="parent"
  app:layout_constraintEnd_toEndOf="parent"
  app:layout_constraintHorizontal_bias="0.804"
  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintTop_toTopOf="parent"
  app:layout_constraintVertical_bias="0.499" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

测试效果先加到12

Android实现关机后数据不会丢失问题

再重启

Android实现关机后数据不会丢失问题

重启之后重新打开app

Android实现关机后数据不会丢失问题

值还是没有变化测试成功

总结

以上所述是小编给大家介绍的Android实现关机后数据不会丢失问题,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

来源:https://blog.csdn.net/weixin_43635647/article/details/102766005

标签:android,关机,数据,不会丢失
0
投稿

猜你喜欢

  • MyBatis Xml映射文件之字符串替换方式

    2022-03-23 00:06:39
  • c#使用windows服务更新站点地图的详细示例

    2021-07-24 10:45:52
  • C#文件合并的方法

    2022-08-07 13:22:17
  • java数字转汉字工具类详解

    2023-04-28 02:00:26
  • Java使用arthas修改日志级别详解

    2023-02-04 23:09:26
  • Android Studio使用小技巧:提取方法代码片段

    2023-11-14 19:35:20
  • Java中使用Lambda表达式和函数编程示例

    2022-05-06 03:30:40
  • 浅谈Spring @Async异步线程池用法总结

    2021-09-11 07:12:08
  • 使用Java visualVM监控远程JVM的流程分析

    2022-03-19 16:56:02
  • C# 多线程读取注册表,加载至TreeView

    2023-04-08 14:52:27
  • Windows系统中使用C#编写蓝牙通信程序的简单实例

    2022-03-02 00:12:10
  • Java基于Tcp协议的socket编程实例

    2022-03-08 00:04:13
  • mybatis的if判断integer问题

    2022-12-23 20:15:41
  • Java中输出字符的ASCII值实例

    2023-02-27 08:59:11
  • SpringBoot使用POI进行Excel下载

    2022-06-14 13:16:13
  • 解析JAVA深度克隆与浅度克隆的区别详解

    2023-11-02 10:57:28
  • SpringBoot绿叶显示yml和端口问题及解决方法

    2023-12-09 00:29:13
  • 梳理总结Java static关键字的方法作用

    2023-06-09 04:06:17
  • Spring Bean的初始化和销毁实例详解

    2023-10-28 05:56:04
  • Unity 使用tiledmap解析地图的详细过程

    2023-06-02 18:40:57
  • asp之家 软件编程 m.aspxhome.com