首页 > 其他分享 >SavedStateHandle的介绍----ViewModel不具备保存状态数据的功能

SavedStateHandle的介绍----ViewModel不具备保存状态数据的功能

时间:2023-07-16 18:22:23浏览次数:30  
标签:SavedStateHandle ViewModel LiveData ---- android com mState

LiveData本身不能在进程销毁中存活,当内存不足时,Activity被系统杀死,ViewModel本身也会被销毁。 为了保存LiveData的数据,使用SavedStateHandle。 事故场景: 进程销毁后,重新去通过ViewModel去获取LiveData数据,获取到的数据是null。 这表示ViewModel不具备onSavedInstance的功能。   引入SavedStateHandle,进程销毁重建就可以获取到数据:

private SavedStateHandle mState;

public SavedStateViewModel(SavedStateHandle savedStateHandle) {
   mState = savedStateHandle;
}

private static final String NAME_KEY = "name";

// Expose an immutable LiveData
LiveData<String> getName() {
    return mState.getLiveData(NAME_KEY);
}

void saveNewName(String newName) {
    mState.set(NAME_KEY, newName);
}

在上述代码的情况下,进程销毁,ViewModel重建,重新获取LiveData,就不会为为null了。

  相比与onSaveInstanceState 不用重写onSaveInstanceState就可以获得保存状态数据的功能,这就是最大的优点。 可以替代Bundle,不需要从Activity获取和发送数据,之前的做法是,数据保存在onSavedInstanceState回调方法中的Bundle,然后重建的时候,通过onCreate方法中的Bundle获取。 SavedStateHandle的效果跟Bundle一样,也是只能保存少量数据。   https://medium.com/androiddevelopers/viewmodels-persistence-onsaveinstancestate-restoring-ui-state-and-loaders-fc7cc4a6c090 https://developer.android.com/codelabs/android-lifecycles#6   https://developer.android.com/topic/libraries/architecture/viewmodel/viewmodel-savedstate https://developer.android.com/codelabs/android-lifecycles#6  

标签:SavedStateHandle,ViewModel,LiveData,----,android,com,mState
From: https://www.cnblogs.com/ttylinux/p/17558299.html

相关文章

  • 2023.7.16
    1importjava.sql.SQLOutput;2importjava.util.Scanner;3//数组的使用4publicclasstest{5publicstaticvoidmain(String[]args)6{7int[]arrays={1,2,3,4,5};8//for_each循环9for(intarray:arrays){//......
  • 假期计划
    为表假期好好学习之决心,特此制定一份基于大尺度宏观计划和小尺度每日时间规划的假期学习计划。·每日时间规划\(7:30\)\(ard.\)起床,洗刷,吃饭。$8:30$开始上午学习具体学习内容:1:各科假期作业(语文、数学、英语、物理、化学、地理)2:学习优先级(语文\(\rightarrow\)英语\(\r......
  • 前N个公司
    问题:各国家所有公司数量从多到少排列,如下图黄色区域。函数公式解决:{=IFERROR(INDEX(SORTBY(UNIQUE(FILTER($A$2:$A$18,$B$2:$B$18=E$2))&"/"&COUNTIFS($A:$A,UNIQUE(FILTER($A$2:$A$18,$B$2:$B$18=E$2)),$B:$B,E$2),COUNTIFS($A:$A,UNIQUE(FILTER($A$2:$A$18,$B$2:$B$18=E$2))......
  • 2023年7月16日 天气:晴
       今天早上起来背了10个单词,然后出去打了两个小时的羽毛球,然后看了一小时的电视剧,再就是练了一个小时的字,然后学习了一个小时的java,最后看了一会儿构建之法,编程了一个小时的C语言。  明天打算早上起来看一小时的英语课本,然后出去玩一个小时,再看一小时的java课本,然后练......
  • HTML5的Video标签的属性,方法和事件汇总
    HTML5的Video标签的属性,方法和事件汇总 常用屬性與方法:获取视频元素:varvideoElement=document.getElementById("videoPlay");获取设置音量大小:videoElement.volume获取设置当前播放的位置:videoElement.currentTime播放视频:videoElement.play()暂停视频:videoElement.p......
  • 7.16
    java学生管理系统练习,做了一个简易的管理系统,练科一packagestudentsystem; publicclassStudent{privateStringid;privateStringname;privateStringhome;privatelongnumber;publicStudent(Stringid,Stringname,Stringhome,longnumber){super();t......
  • Spring+SpringMVC+Thymeleaf 示例
    目录参考资料开发工具1环境准备2使用maven模板构建war工程2.1File->New->Other2.2选择【MavenProject】2.3选择maven模板2.4输入GroupId、ArtifactId、package2.5生成的项目工程2.6配置项目2.7完整工程目录3配置SpringMVC3.1引入Springjar3.2配置......
  • Docker部署Java应用[转]
    练习要求:在CentOSLinuxrelease7.7.1908(Core)中,先拉一个Centos镜像,然后在光秃秃的centos镜像基础上把项目环境搭建好,然后再提交到自己的docker仓库里。 操作环境:虚拟机中安装好的CentOSLinuxrelease7.7.1908(Core) 一、安装并启动Docker 1.更新yumyum-yu......
  • windows安装nginx
    windows安装nginx安装环境操作系统:windows11。nginx版本:1.20.2。这只是我的安装环境,你安装的时候,如果你的操作系统版本和我的不一样,应该也不影响,但是希望安装的nginx版本最好和我的一样,我相信你按照我的教程步骤来安装一定会安装成功的。nginx下载百度网盘下载:https://......
  • 模板
    模板合集目录模板合集A-基本算法。快速幂B-数据结构。树状数组线段树平衡树笛卡尔树分块莫队LCALCT虚树DSUontreeC-图论kruskal重构树SPFA圆方树二分图二分图最大匹配网络流A-基本算法。快速幂llqpow(lla,intb){ llres=1ll; while(b){ if(b&1)res=res*a%m......