首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

27.1.x中的ViewModel功能因对子活动的配置更改而中断

ViewModel是一种Android架构组件,用于在应用程序的不同组件之间共享和管理数据。它旨在解决活动(Activity)和片段(Fragment)之间的通信和数据共享问题。

在27.1.x版本中,ViewModel功能可能会因对子活动的配置更改而中断。这意味着当子活动(例如,屏幕旋转)发生配置更改时,ViewModel实例可能会被销毁并重新创建,导致数据丢失或重置。

为了解决这个问题,可以采取以下措施:

  1. 使用ViewModel的SavedState模块:SavedState模块是ViewModel组件的一部分,它允许在配置更改时保存和恢复ViewModel的状态。通过使用SavedState模块,可以确保在子活动配置更改时,ViewModel的数据仍然可用。
  2. 使用LiveData:LiveData是一种可观察的数据持有者,它可以感知生命周期并在数据发生更改时通知观察者。通过将LiveData与ViewModel结合使用,可以确保在子活动配置更改时,数据仍然可以被观察和访问。
  3. 避免在ViewModel中持有对活动的引用:为了避免内存泄漏和不必要的依赖关系,应该避免在ViewModel中持有对活动的引用。相反,应该使用LiveData或其他可观察的数据持有者来传递数据和状态。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):提供可扩展的计算能力,适用于各种应用场景。产品介绍链接
  • 腾讯云云数据库MySQL版:高性能、可扩展的关系型数据库服务。产品介绍链接
  • 腾讯云对象存储(COS):安全、稳定、高扩展性的云端存储服务。产品介绍链接
  • 腾讯云人工智能:提供丰富的人工智能服务和解决方案,包括图像识别、语音识别、自然语言处理等。产品介绍链接
  • 腾讯云物联网平台(IoT Hub):连接和管理物联网设备,实现设备数据的采集和控制。产品介绍链接
  • 腾讯云移动推送:提供消息推送服务,帮助开发者实现消息的实时推送。产品介绍链接

请注意,以上链接仅供参考,具体产品选择应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

ViewModel 类开发了一个简单用例来保存配置更改过程篮球分数。...onSaveInstanceState(): 这个回调是为了保存两种情况下少量 UI 相关数据: 应用进程在后台时候由于内存限制被终止。 配置更改。...ViewModel 只能在配置更改相关销毁情况下保留,不能在被终止进程存留。...不过,在这两种场景,你仍需要一个 ViewModel 来避免配置更改重新从数据库中加载数据导致资源浪费。 ViewModel 是 Loader 一个替代品吗?...ViewModel 不是 onSaveInstanceState() 替代品,因为他们在与配置更改相关销毁时保存数据,不能在系统杀死应用进程时保存。

3.8K30

ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

我在上篇博文中用新 ViewModel 类开发了一个简单用例来保存配置更改过程篮球分数。ViewModel 被设计用来以与生命周期相关方式保存和管理 UI 相关数据。...ViewModel 类开发了一个简单用例来保存配置更改过程篮球分数。...ViewModel 只能在配置更改相关销毁情况下保留,不能在被终止进程存留。...不过,在这两种场景,你仍需要一个 ViewModel 来避免配置更改重新从数据库中加载数据导致资源浪费。 ViewModel 是 Loader 一个替代品吗?...ViewModel 不是 onSaveInstanceState() 替代品,因为他们在与配置更改相关销毁时保存数据,不能在系统杀死应用进程时保存。

1K20
  • “终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握!

    例如,界面含用户信息列表,配置更改重新创建 Activity 后,新 Activity 必须重新请求用户列表,这会造成资源浪费。能否直接恢复之前数据呢?...那么如何做到 配置更改新建Activity后数据恢复呢?...到这里,我们知道了 ViewModel如何存储、实例如何获取,但开头说分析重点:“配置更新界面重建后,ViewModel实例依然存在”,这个还没分析到。...而使用ViewModel恢复数据 则 只有在 配置更改界面销毁重建 情况。...五、总结 本文先介绍了ViewModel概念——为界面准备数据模型,然后它特点:配置更改界面销毁重建后依然存在、不持有UI应用;接着介绍了 使用方式、Fragment数据共享。

    1.8K10

    区域设置更改和 AndroidViewModel 反面模式

    ViewModel ,如果要公开来自资源(字符串、可绘制文件、颜色……)数据,则必须着重考虑 ViewModel 对象忽视配置更改,例如区域设置更改。...当用户更改其区域设置时,活动将重新被创建,但不创建 ViewModel 对象。 AndroidViewModel 是已知应用程序上下文 ViewModel 子类。...让我们看看跟踪器基于此问题示例:在系统区域设置更改时更新 ViewModel 。...如果有区域设置更改,则不会重新创建视图模型。这将导致我们应用程序显示废弃数据,因此只能部分本地化。...由于视图(活动、片段等)具有生命周期意识,因此它将在配置更改后重新创建,以便正确地重新加载资源。

    11810

    区域设置更改和 AndroidViewModel 反面模式

    ViewModel ,如果要公开来自资源(字符串、可绘制文件、颜色……)数据,则必须着重考虑 ViewModel 对象忽视配置更改,例如区域设置更改。...当用户更改其区域设置时,活动将重新被创建,但不创建 ViewModel 对象。 ? AndroidViewModel 是已知应用程序上下文 ViewModel 子类。...让我们看看跟踪器基于此问题示例:在系统区域设置更改时更新 ViewModel 。...如果有区域设置更改,则不会重新创建视图模型。这将导致我们应用程序显示废弃数据,因此只能部分本地化。...由于视图(活动、片段等)具有生命周期意识,因此它将在配置更改后重新创建,以便正确地重新加载资源。

    1.2K60

    你真的了解ViewModel设计思想吗?

    在AndroidViewModel通常用于存储和管理与UI相关数据,以确保这些数据在屏幕旋转或配置更改等情况下不会丢失。 原理解析 ViewModel原理是基于ViewModelStore类。...这意味着我们无需担心内存泄漏或不必要资源占用。 持久性存储: ViewModel可以存储大量数据,并且在配置更改时仍然保持活动。...它存在是为了解决以下问题: 生命周期一致性:在Android开发,我们经常遇到配置更改(如屏幕旋转)导致Activity或Fragment被销毁并重新创建情况。...这个ViewModel将在配置更改时保持活动,确保数据不会丢失。 高级运用 使用SavedStateHandle SavedStateHandle是一个可用于在配置更改后保持数据工具。...这使得在ViewModel执行耗时操作成为可能,不会阻塞UI线程。

    27510

    Android Jetpack - LiveData

    生命周期状态更改时,LiveData 会通知 Observer 对象。你可以合并代码以更新这些 Observer 对象 UI。...每次应用程序数据更改时,你观察者都可以在每次更改时更新 UI,不是更新 UI 没有内存泄露 观察者绑定到 Lifecycle 对象,并在其相关生命周期被破坏后自行清理 不会因为活动停止崩溃 如果观察者生命周期处于非活动状态...,例如在后端堆栈活动情况下,则它不会收到任何 LiveData 事件 不再需要手动处理生命周期 UI 组件只是观察相关数据,不会停止或恢复观察。...例如,后台活动在返回前台后立即接收最新数据 配置更改友好 如果由于配置更改(例如设备轮换)重新创建活动或片段,则会立即接收最新可用数据 资源共享 你可以使用单例模式扩展 LiveData 对象以包装系统服务...: 1、创建持有任意类型 LiveData 实例,这一步通常在 ViewModel 完成 2、创建一个 Observer 对象并重写其 onChanged() 方法,该方法会在 LiveData 数据更改时被回调并返回最新数据

    2K30

    LiveData优势

    不会 Activity 停止导致崩溃 如果观察者生命周期处于非活跃状态(如返回栈 Activity),则它不会接收任何 LiveData 事件(也是通过LifecycleOwner实现)...如果看源码会发现Observe有一个version版本号,LiveData也有一个版本号是否调用观察者通知数据变化就是比对这两个版本号是否一致,ViewModel会保存LiveData实例,当重建时LiveData...版本号还是之前版本号,观察者此时重走OnCreate为0,所以可以收到上一次数据变化通知 适当配置更改 如果由于配置更改(如设备旋转)重新创建了 Activity 或 Fragment...(ViewModel通过在OnDestory时候保存到Configure属性,当attach时候取出这个属性里面的Viewodel赋值给组件,当Activity/Fragment重新get获取时候拿到就是上次...这个具体场景就是搭配Room数据库返回LiveData结合,之前需要手动去做逻辑变更,但现在唯一数据源是数据库只需要更改数据库即可,不需要再Activity处理逻辑改变数据源,符合上一篇文章说到单项数据流原则

    1.3K20

    已中招!Android 基础面试常常吊死在这几个问题上……

    应聘者:使用 ViewModels 和组合 onSaveInstanceState() , ViewModel 具有 LifeCycle-Aware 功能。...换句话说,如果 ViewModel 所有者配置更改(例如,旋转)被销毁,则不会销毁它。所有者新实例将重新连接到现有的 ViewModel 。...通常做法是将数据存储在 ViewModel(因为它在配置更改期间保留数据),并使用 OnSaveInstanceState 存储少量UI数据。 面试官:回答得不错!...12、面试官:说一下 AsyncTasks 和线程他们区别! 应聘者:应使用线程将长时间运行操作与主线程分开,以提高性能。但是它不能被优雅地取消,并且不能处理 Android 配置更改。...当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 数据同时帮忙处理 View 由于需要展示内容涉及业务逻辑。 面试官:这是你回答过最漂亮一个了。

    2K20

    Jetpack ComposeMVVM实现及ViewModel和remember对比

    数据持久性: ViewModel: ViewModel 数据通常具有较长生命周期,并且在配置更改(如屏幕旋转)时会被保留。...remember: remember 数据通常是临时性,不会在配置更改后保留。...这对于静态数据或者不会用户交互改变数据很有用。如果状态改变不需要在组件生命周期之外持久化,remember是一个更轻量级选择。...这对于需要跨配置更改(例如旋转屏幕)或者应用程序生命周期状态非常有用。它会将状态保存在Bundle,以确保状态持久化。...ViewModel ViewModel 类是一种业务逻辑或屏幕级状态容器。它用于将状态公开给界面,以及封装相关业务逻辑。 它主要优点是,它可以缓存状态,并可在配置更改后持久保留相应状态。

    1.2K11

    由浅入深,详解ViewModel那些事

    常见场景有:旋转屏幕、深色模式切换、屏幕大小变化、更改了默认语言或者时区、更改字体大小或主题颜色等。 何谓异常重建? 异常重建指的是非配置变更情况下导致 Activity 重新创建。...这也是为啥Android程序普遍不支持屏幕旋转一部分原因,从源头扼杀部分配置变更导致状态丢失问题。...保命 VideModel存在之后世界 随着 ViewModel 组件推出之后,上述配置变更导致状态丢失问题就迎刃而解。 ViewModel 可以做到在配置变更后依然持有状态。...SavedStateHandle使用方式 我们知道,ViewModel 可以处理因为配置更改导致状态丢失,但并不保证异常终止情况,官方 SavedStateHandle 正是用于这种情况解决方式...销毁),如果当前销毁原因非配置更改导致,则调用 ViewModeltore.clear() ,即清空我们ViewModel缓存列表,从而这也是为什么 ViewModel 不支持非配置更改实例保存。

    81440

    干货 | 高耦合场景下,Trip.com如何做支付设计与落地

    支付运营可以对不同支付方式配置各自优惠券以及服务费。在支付过程,用户可能恰好遇到运营配置变动,在这种极端场景下,我们需要考虑数据更新以及视图更新。...2.1.2 划分 在划分时主要依据SOLID单一功能原则作为划分,将支付页面每一个视图作为一个base case。...在实现时首先考虑使用JetpackLiveData组件来作为数据存储器类,配合JetpackViewModel使用,使得在系统配置发生改变时也可以对数据做保存。...它注重生命周期存储和管理界面相关数据,让数据可在发生屏幕旋转等配置更改后继续留存。...LiveData是一个粘性事件,页面由非活动状态转到活动状态,只能收到最后一次数据,导致前序数据丢失,某些业务场可能要求数据不丢失或非活动状态仍要接收数据,此时LiveData就不再满足需求。

    71820

    Andorid-JetPack-ViewModel组件

    1.什么是ViewModel 具备宿主生命周期感知能力数据存储组件 ViewModel保存数据,在页面 配置变更导致页面销毁 重建之后依然是存在 配置变更:横竖屏切换、分辨率调整、权限变更、系统字体样式变更...其实就是ViewModel实例被保存了下来,页面重建之后获取ViewModel是同一个 2.基本用法 常规用法:存储数据,仅仅只能当页面因为配置变更导致销毁再重建时可复用,复用ViewModel...该方法onRetainCustomNonConfigurationInstance()这行代码, 如果我们想在activity保存一下数据,就是说配置变更页面被销毁了,重建时候继续复用...方法, //从而把Activity受到配置变更不想丢失数据给保存起来,那我们viewModelStore对象也就被保存起来了 r.lastNonConfigurationInstances...,这个字段存储就是配置变更导致被销毁那个activity存留下来数据 3.当handleDestroyActivity()这个方法被调用完,我们ActivityClientRecord 这个

    1.8K30

    Android-ViewModel和LiveData使用详解

    我们可以在onSaveInstanceState()方法中保存数据,并从onCreate()方法通过Bundle恢复数据,但这种方法只适用于可以对其进行序列化少量数据,不适用于潜在大量数据。...LiveData会将观察者视为活动状态,并通知其数据变化。LiveData未注册观察对象以及非活动观察者是不会收到有关更新通知。...LiveData优点: 确保UI界面的数据状态 LiveData遵循观察者模式。LiveData在生命周期状态更改时通知Observer对象,更新这些Observer对象UI。...观察者可以在每次应用程序数据更改时更新UI,不是每次发生更改时更新UI。 没有内存泄漏 当观察者被绑定他们对应LifeCycle以后,当页面销毁时他们会自动被移除,不会导致内存溢出。...配置改变 当前Activity配置改变(如屏幕方向),导致重新从onCreate走一遍,这时观察者们会立刻收到配置变化前最新数据。

    3.5K30

    Android从零开始搭建MVVM架构(4)——LiveData

    当你更新LiveData对象存储数据时,所有注册了Observer,只要所绑定LifecycleOwner处于活动状态,就会被触发通知。...确保在ViewModel不是Activity或Fragment中保存用来更新UILiveData对象,原因如下: 避免臃肿Activity和Fragment。...这些UI控制器负责显示数据不是保存数据状态。 将LiveData实例与特定Activity或Fragment实例分离,这将使得LiveData对象在配置更改后仍然存活。...由于没有Observer在监听,所以没有理由继续保持与StockManager服务连接。 setValue(T)方法更新LiveData实例值,并通知活动观察者有关更改。...这样做表示此Observer绑定了Lifecycle对象生命周期,即: 1.如果Lifecycle对象不处于活动状态,则即使值发生更改,也不会调用Observer。

    2.3K30

    Android Jetpack - Lifecycles

    ,在 Android Jetpack - ViewModel ,我们实现了一个简易计时器,该计时器可以在 Activity 处于配置更改或后台情况下继续计时,我们现在利用 Lifecycle 修改它...他们不应该试图获取自己数据;相反,使用 ViewModel 执行此操作,并观察 LiveData 对象以将更改反映回 UI 尝试编写数据驱动 UI,其中 UI 控制器负责在数据更改时更新视图,或将用户操作通知给...ViewModel 将您数据逻辑放在 ViewModel。...这使您可以使视图更具说明性,并最大限度地减少在活动和片段编写所需更新代码。...一旦 ViewModel 存活时间超过活动(在配置更改情况下 Activity 会被多次重建),Activity 会因为垃圾回收器没有妥善处理发生内存泄露 使用 Kotlin 协程来管理长时间运行任务以及可以异步运行其他操作

    1.4K30

    谷歌官方Android应用架构库——LiveData

    ,以便只有当它们任何一个可见(即处于活动状态)时才连接到系统服务。...正确处理配置更改:如果 activity 或 fragment 由于配置更改(如:设备旋转)重新创建,将会立即收到最新有效位置数据。...转换这种惰性运算性质允许隐式传递生命周期相关行为,不必添加显式调用或依赖。 每当你认为在 ViewModel 需要一个 Lifecycle 类时,转换可能是解决方案。...该 UI 简单 ViewModel 可能像这样: class MyViewModel extends ViewModel { private final PostalCodeRepository...ViewModel 可以轻松获取到 LiveData 并在它们上面定义转换规则。 创建新转换 在应用程序可能会用到十几种不同特定转换,但是默认是不提供

    1.1K30

    Android 面试题:为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列(3)

    2、数据维度: 由于 Activity 存在配置变更销毁重建机制,会造成 Activity 所有瞬态数据丢失,例如网络请求得到用户信息、视频播放信息或者异步任务都会丢失。... ViewModel 能够应对 Activity 配置变更重建场景,在重建过程恢复 ViewModel 数据,从而降低用户体验受损。...当 Activity 配置变更重建时,我们可以将页面上数据或状态可以定义为 2 类: 第 1 类 - 配置数据: 例如窗口大小、多语言字符、多主题资源等,当设备配置变更时,需要根据最新配置重新读取新数据...对于 ViewModel 来说,相当于旧 Activity 中所有的 ViewModel 映射表被透明地传递到重建后新 Activity ,这就实现了恢复 ViewModel 功能。...---- 现在,我们回过头来分析下 ActivityThread 这一部分源码: ActivityThread 调用过程: 在 Activity 配置变更重建时,系统将执行 Relaunch 重建过程

    1.2K20
    领券