美文网首页
关于界面的状态保存和恢复小记

关于界面的状态保存和恢复小记

作者: Horps | 来源:发表于2023-02-20 10:48 被阅读0次
  • 概述

    1. 如果你希望在Activity销毁之后—无论是自行销毁还是被系统kill—都总是执行初始化逻辑来展示界面,这种情况下不需要任何保存和恢复。
    2. 另一种就是需要根据一些临时数据来恢复界面,但是注意这种情况下只对被系统杀死的Activity才会触发,自行杀死的将不会调用相关保存方法。比如我需要记住输入框输入的内容、当前滚动位置、当前查询的内容id、偏好设置等,这些数据是我当前界面操作的状态,按照它们的用处来说不需要保存到本地(数据库等),在配置变更(比如旋转屏幕)或者在后台被系统杀死后再重新启动这个Activity时,就需要重现当时的界面状态。

    第一种是自然状态,不需要额外管理,状态的保存和恢复是针对第二种情况来说的。

  • ViewModel

    如果界面数据使用的是ViewModel中的数据,ViewModel就会自动被复用,但是这是有条件的:

    1. 应用没被杀死,这是首要条件;
    2. 当前Activity没有被finish,手动调用finish方法的话表示是用户主动想要关闭的,因此不需要保存,若是调用finish方法后,ViewModel实例也会自动从内存中移除;
    3. 如果想要在应用被杀死后重启页面时也能继续复用的话则需要使用ViewModel的SavedStateHandle参数,这里的原理可以通过ViewModelProvider来了解,它其实本质上使用的也是Activity的onSaveInstanceState方法来保存的;

    比如,当ViewModel在配置发生变更(比如旋转屏幕)但同时应用没有被杀死时实例会自动保存到内存中,也即是说,这个时候ViewModel的实例是保存在应用内存中的,等到Activity恢复时再次获取ViewModel时就会从内存中取回之前的实例,因此也就能复用之前的数据。

  • 保存实例API

    我们知道,当应用被系统杀死时(内存不足)—这个杀死不包括手动的kill(finish或者任务栈kill)—我们可以在onSaveInstanceState中保存一些数据,在onCreate或者onRestoreInstanceState中来恢复数据。

    这种方式下,数据不是保存在内存中的,而是磁盘,因此应用被杀死时依然可以恢复,上面的ViewModel使用的SavedStateHandle也是通过这种方式来获取的。

  • 概括

    image-20230221104736828

相关文章

  • Android Fragment使用(三) Activity,

    Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其...

  • UI状态保存和恢复(二)

    UI状态保存和恢复(二) 上篇我们介绍了UI状态保存和恢复的流程,UIStateRestoration协议类的方法...

  • cavas的用法

    变换操作 状态保存和恢复

  • Activity状态保存和恢复

    标签(空格分隔):Actiivty 状态保存和恢复 当我们在前台和后台切换,或者横竖屏切换的时候,Activity...

  • UI状态保存和恢复(三)

    UI状态保存和恢复(三) 前面两篇我们介绍了UI状态保存和恢复的流程,UIStateRestoration协议类的...

  • APP State Restoration

    概述 状态保存和恢复:保存app原来的界面,APP被系统中断后恢复之前的状态,文档描述如下:Preserving ...

  • Android的状态保存和恢复

    Activity的状态保存和恢复 Activity的状态什么时候需要保存和恢复 Activity的销毁一般分为两种...

  • canvas常用操作

    save()保存画布(canvas)的所有状态restore()save 和 restore 方法是用来保存和恢复...

  • 保存和恢复App的状态

    前言 为什么翻译这系列文章 概述 ViewController在App状态的保存和恢复过程中扮演者重要的角色。状态...

  • Activity状态的恢复和保存

    通常我们采用下面的方式保存Activity的状态 @Overrideprotected void onSaveIn...

网友评论

      本文标题:关于界面的状态保存和恢复小记

      本文链接:https://www.haomeiwen.com/subject/xjxgkdtx.html