操作程序如下:

主要是创建一个

SavedStateHandle 来缓存上一次的数据,并通过重新读取上一次存储的数据来实现数据的存活

MyVIewModel:

 package com.example.viewmodeltest;

 import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.SavedStateHandle;
import androidx.lifecycle.ViewModel; public class MyViewModel extends ViewModel {
private MutableLiveData<Integer> number; private SavedStateHandle handle;
//存放简单数据
/* public MyViewModel(SavedStateHandle handle){
this.handle=handle;
}*/ public MutableLiveData<Integer> getNumber() {
if(number ==null){
number =new MutableLiveData<>();
number.setValue(0);
}
return number;
/* if (handle.contains(MainActivity.KEY_NUMBER)){
handle.set(MainActivity.KEY_NUMBER,0); //第一次被加载时执行
}
return handle.getLiveData(MainActivity.KEY_NUMBER);*/
}
public void add(){
number.setValue(number.getValue()+1);
// getNumber().setValue(getNumber().getValue()+1);
}
}

Main_Activity

 package com.example.viewmodeltest;

 import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.SavedStateViewModelFactory;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders; import android.os.Bundle; import com.example.viewmodeltest.databinding.ActivityMainBinding; public class MainActivity extends AppCompatActivity { ActivityMainBinding binding;
MyViewModel myViewModel;
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).get(MyViewModel.class);
//myViewModel= ViewModelProviders.of(this,new SavedStateViewModelFactory(this)).get(MyViewModel.class);
/* if(savedInstanceState!=null){
myViewModel.getNumber().setValue(savedInstanceState.getInt(KEY_NUMBER));
}*/ binding.setData(myViewModel);
binding.setLifecycleOwner(this); } @Override
protected void onSaveInstanceState(@NonNull Bundle outState) { //调用存储数据的函数
super.onSaveInstanceState(outState);
outState.putInt(KEY_NUMBER,myViewModel.getNumber().getValue());
}
}

Android持久化存储的几种方式

1.文件存储

在应用开发当中会出现从网络中加载图片的过程。而从网络请求都需要时间,若网络速度不够快,就会造成网络图片加载过慢,甚至不成功的问题。在Android中对此的处理就是对已加载的图片文件进行缓存,包括内存缓存和硬盘缓存。

2.网络存储

例如每个用户的个人资料,都会在远程服务器存储一份,保证在不同的终端都可以登陆或者获取每个用户的个人资料。

3.SharedPreferences

它是一种轻量级的存储方式,适用于存储简单的参数配置。比如说上一次登陆的账号等等。

SharedPreferences的原理是使用XMl文件来存放数据。

4.Sqlit数据库存储和ContentProvider

ContentProvider

属于Android的四大组件之一。主要作用为用来与其他应用进行数据交互。

ContentProvider只是用来提供内容或者修改内容的接口。

具体如何去获取数据、去哪里获取数据我们还是需要依靠其他的数据获取的方式。在ContentProvider内部,我们可以通过网络去得到当前应用的用户资料,可以通过SharedPreferences得到当前应用的配置,也可以通过文件来得到某些资源。所以它当然也可以通过Sqlit来操作底层的数据库。

参考 : https://blog.csdn.net/qq_35700731/article/details/78781540

2.13 ViewModel 使数据即使在后台被杀死数据也能存活的更多相关文章

  1. Flask04 后台获取请求数据、视图函数返回类型、前台接受响应数据

    1 后台获取请求数据 1.1 提出问题 前台发送请求的方式有哪些 后台如何获取这些请求的参数 1.2 前台发送请求的方式 GET.POST.AJAX 点睛:如果不指定请求方式,浏览器默认使用GET请求 ...

  2. HTML5与后台服务器的数据流动问题

    编辑中,尚未完稿...2017.7.14 1345 很多前端开发出来的HTML5可能对于后台开发者来说,并不是很清楚,也许像我一样一知半解.而且真的让人很糊涂的地方就是前端的JS如何与后端的数据库进行 ...

  3. MVC后台传dt数据

    //MVC后台传dt数据 public JsonResult TeacherVoteInfo([FromBody]Teacher_VoteModel model) { string tname = m ...

  4. 传递给后台的Json数据解析

    后台代码如下: public void ProcessRequest(HttpContext context) { context.Response.ContentType = "appli ...

  5. application/x-www-form-urlencoded multipart/form-data text/plain 后台返回的数据响应的格式类型

    application/x-www-form-urlencoded multipart/form-data text/plain 为什么上传文件的表单里要加个属性 enctype  后台返回的数据响应 ...

  6. jquery用ajax方式从后台获取json数据,将内容填充到下拉列表。

    从后台获取json数据,将内容填充到下拉列表. url:链接 par:ID sel:下拉列表选择器 //获取下拉列表 function BuildSelectBox(url, par, sel) { ...

  7. jquery ajax 后台和前台数据交互 C#

    <input type="button" id="updateInfo" value="更改货载重量" /> <div i ...

  8. jsp中添加弹窗口并且实现向后台双向传递数据

    思路:使用jquery-easyui框架实现弹出div,在jsp初始化时从后台获得数据初始化div中的form表单元素的value属性,从而获得后台数据.在点击确定按钮时使用ajax向后台发送数据. ...

  9. angular的$http.post()提交数据到Java后台接收不到参数值问题的解决方法

    本文地址:http://www.cnblogs.com/jying/p/6733408.html   转载请注明出处: 写此文的背景:在工作学习使用angular的$http.post()提交数据时, ...

随机推荐

  1. iis下发布MVC网站

    1.首先检查有没有安装iis,没有的话先安装iis 2. 3.选择应用程序池的时候看有没有asp.net 4.0 如果没有先安装. 首先以管理员身份打开“运行”输入cd C:\Windows\Micr ...

  2. cookie、sessionStorage和localStorage的区别

    cookie.sessionStorage.localStorage 都是用于本地存储的技术:其中 cookie 出现最早,但是存储容量较小,仅有4KB:sessionStorage.localSto ...

  3. 随机序列[SHOI2016](找规律+线段树)

    传送门 这道题的题意就是给你n个数让你在每个数之间插入+.-.*三种运算符中的一种,然后算出一个答案,再把答案加起来. 这题肯定是不能暴力的(题目都告诉你了由3n-1种结果).我们先从小的情况枚举找一 ...

  4. helm基本用法

    一.helm命令 helm search #关键字搜索charts helm pull #压缩下载chart到本地,可以使用--untar下载解压) helm install #部署chart到kub ...

  5. 新闻网大数据实时分析可视化系统项目——9、Flume+HBase+Kafka集成与开发

    1.下载Flume源码并导入Idea开发工具 1)将apache-flume-1.7.0-src.tar.gz源码下载到本地解压 2)通过idea导入flume源码 打开idea开发工具,选择File ...

  6. Oracle查看正在执行的存储过程

    正在执行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks >0 and pin ...

  7. 前端学习笔记系列一:12 js中获取时间new date()的用法

    获取时间: 1  var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.get ...

  8. 02.python实现排序算法

    一.列表排序 将无序列表变为有序列表 应用场景: 榜单,表格, 给二分查找用,给其他算法用 二.python实现三种简单排序算法 时间复杂度O(n^2), 空间O(1) 1.冒泡排序 思路: 列表每两 ...

  9. centos 虚拟机安装调试

    service network restart reboot yum update -y cd /etccd sysconfigcd network-scripts[root@u0mo5 networ ...

  10. 写的一个轻量级javascript框架的设计模式

    公司一直使用jQuery框架,一些小的项目还是觉得jQuery框架太过于强大了,于是自己周末有空琢磨着写个自己的框架.谈到js的设计模式,不得不说说js的类继承机制,javascript不同于PHP可 ...