zoukankan      html  css  js  c++  java
  • 2.13 ViewModel 使数据即使在后台被杀死数据也能存活

    操作程序如下:

    主要是创建一个

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

    MyVIewModel:

     1 package com.example.viewmodeltest;
     2 
     3 import androidx.lifecycle.MutableLiveData;
     4 import androidx.lifecycle.SavedStateHandle;
     5 import androidx.lifecycle.ViewModel;
     6 
     7 public class MyViewModel extends ViewModel {
     8     private MutableLiveData<Integer> number;
     9 
    10     private SavedStateHandle handle;
    11     //存放简单数据
    12    /* public MyViewModel(SavedStateHandle handle){
    13             this.handle=handle;
    14     }*/
    15 
    16     public MutableLiveData<Integer> getNumber() {
    17         if(number ==null){
    18             number =new MutableLiveData<>();
    19             number.setValue(0);
    20         }
    21         return number;
    22     /*  if (handle.contains(MainActivity.KEY_NUMBER)){
    23           handle.set(MainActivity.KEY_NUMBER,0);   //第一次被加载时执行
    24       }
    25       return handle.getLiveData(MainActivity.KEY_NUMBER);*/
    26     }
    27     public  void  add(){
    28         number.setValue(number.getValue()+1);
    29        // getNumber().setValue(getNumber().getValue()+1);
    30     }
    31 }

    Main_Activity 

     1 package com.example.viewmodeltest;
     2 
     3 import androidx.annotation.NonNull;
     4 import androidx.appcompat.app.AppCompatActivity;
     5 import androidx.databinding.DataBindingUtil;
     6 import androidx.lifecycle.SavedStateViewModelFactory;
     7 import androidx.lifecycle.ViewModelProvider;
     8 import androidx.lifecycle.ViewModelProviders;
     9 
    10 import android.os.Bundle;
    11 
    12 import com.example.viewmodeltest.databinding.ActivityMainBinding;
    13 
    14 public class MainActivity extends AppCompatActivity {
    15 
    16     ActivityMainBinding binding;
    17     MyViewModel myViewModel;
    18     public final  static  String KEY_NUMBER ="my_number";  //类似全局变量 存储上一次的数据
    19 
    20     @Override
    21     protected void onCreate(Bundle savedInstanceState) {
    22         super.onCreate(savedInstanceState);
    23         binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
    24         myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
    25         //myViewModel= ViewModelProviders.of(this,new SavedStateViewModelFactory(this)).get(MyViewModel.class);
    26       /*  if(savedInstanceState!=null){
    27             myViewModel.getNumber().setValue(savedInstanceState.getInt(KEY_NUMBER));
    28         }*/
    29 
    30         binding.setData(myViewModel);
    31         binding.setLifecycleOwner(this);
    32 
    33     }
    34 
    35     @Override
    36     protected void onSaveInstanceState(@NonNull Bundle outState) {  //调用存储数据的函数
    37         super.onSaveInstanceState(outState);
    38         outState.putInt(KEY_NUMBER,myViewModel.getNumber().getValue());
    39     }
    40 }

    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

  • 相关阅读:
    Hadoop学习之安装HDFS
    常见的6种数据结构
    maven 编译出错 Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean
    jquery解决js对象、数组赋值时的引用传递
    405 method not allowed(方法不被允许)
    身份证件号 正确性检查方法
    svn 提交信息模板
    idea 使用说明
    java-System类
    java-Integer 类
  • 原文地址:https://www.cnblogs.com/cxy0210/p/12304059.html
Copyright © 2011-2022 走看看