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

在屏幕旋转时调用ViewModel onCleared()

在屏幕旋转时调用ViewModel的onCleared()方法是为了在Activity或Fragment销毁时释放ViewModel的资源,以避免内存泄漏和数据丢失。

ViewModel是Android架构组件之一,用于存储和管理与UI相关的数据。它的设计目的是在配置更改(如屏幕旋转)或Activity/Fragment重建时保留数据。ViewModel的生命周期与Activity或Fragment不同,它会在相关的Activity或Fragment销毁时被清除。

当屏幕旋转时,Activity或Fragment会被销毁并重新创建,但ViewModel会保持不变。为了确保ViewModel的资源得到释放,我们需要在Activity或Fragment销毁时手动调用ViewModel的onCleared()方法。

在调用onCleared()方法之前,我们可以在ViewModel中实现一些清理操作,例如取消网络请求、关闭数据库连接、释放资源等。这样可以确保在ViewModel不再需要时,相关资源得到正确释放,避免内存泄漏和其他潜在的问题。

以下是一个示例代码,展示了在屏幕旋转时调用ViewModel的onCleared()方法:

代码语言:txt
复制
public class MyViewModel extends ViewModel {
    // ViewModel的数据和逻辑

    @Override
    protected void onCleared() {
        super.onCleared();
        // 在ViewModel被清除时执行清理操作
        // 取消网络请求、关闭数据库连接、释放资源等
    }
}

对于腾讯云相关产品的推荐,由于要求不能提及具体品牌商,可以参考腾讯云的云计算服务,如云服务器(CVM)、云数据库(CDB)、云存储(COS)等。这些产品提供了稳定可靠的云计算基础设施,适用于各种应用场景,并且具有良好的性能和可扩展性。

更多关于腾讯云云计算服务的信息,可以参考腾讯云官方网站:腾讯云云计算服务

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

相关·内容

ViewModel

二.VIewModel的生命周期特性   由于Android平台的特殊性,若应用程序支持横竖屏切换,那么当用户旋转手机屏幕的时候,我们还需要考虑数据的存储和恢复。...ViewModel独立于配置变化,这意味着,屏幕旋转所导致的Activity重建,并不会影响ViewModel的生命周期,如下图所示: 三.ViewModel的基本使用方法   前面提到,ViewModel...为了验证这一点,我们ViewModel中创建一个计时器,每隔1s钟,通过接口OnTimeChangeListener通知它的调用者,并通过这个示例来学习一下ViewModel的使用。   ...() {//当ViewModel不需要的时候,即与之相关的Activity都被销毁,该方法会被系统调用 super.onCleared(); timer.cancel(...可以看到,当屏幕发生旋转的时候,计时器仍然继续,这意味着横竖屏下的Activity对应的ViewModel是同一个,它所持有的数据一直存在着。

22730
  • JetPack组件学习ViewModel

    ", "onCleared:MyVBiewModel cleared ") } } 2 创建ViewModelProvider Activity中创建ViewModelProvider...1.首次mViewModelStore肯定为null,从nc中取出肯定也取不到只能通过new的方式去创建 2.当经历了屏幕旋转这时候就会从configure中取出viewmodelStore了,对应的也就是第二个红框...vm : mMap.values()) { vm.clear(); } mMap.clear(); } } 问答 如何实现旋转屏幕数据保持不变...token{Activity唯一标识}和record的map), 调用lauchActivity重建页面通过token重新取出record,record取出configure保存到新创建的activity...中的数据变化这样耦合会降低一些 2.当配置失效比如屏幕旋转会销毁重建Activity,数据虽说可以通过onSavedInstance来传递,但是数据量并不能太大。

    63010

    Jetpack组件之ViewModel

    应用开发中,通常将UI交互、数据获取等业务逻辑全部写在页面中,当项目需求不断增加,页面功能复杂,页面类会显得尤为臃肿,且不宜维护。...ViewModel与onSaveInstanceState() 通常我们使用onSaveInstanceState()来解决屏幕旋转带来的数据丢失问题,但是它只能保存少量的支持序列化的数据,Viewmodel...super.onCleared(); } } ViewModel是一个抽象类,只有一个onClear(),当ViewModel与之关联的Activity都被销毁,该方法就会被调用方法里可以执行一些资源释放相关的工作...,注意屏幕旋转导致的Activity重建不会调用该方法。...homeViewModel.addValue()); homeViewModel.setOnChangeListener(textView::setText); 运行代码可以发现点击计数器都会+1,同时旋转屏幕导致

    69310

    Android  JetPack~ ViewModel (一)   介绍与使用

    ViewModel类有如下优点: ViewModel类是具有生命感知的能力,与和他绑定的Activity一样的生命周期,它可以解决请求网络,Activity被突然销毁造成一些不必要的麻烦。...@Override protected void onCleared() { super.onCleared(); } } onCleared方法是ViewModel...独有的,当Activity真正退出后,它会调用,而不是销毁后调用,因为旋转屏幕也会调用onDestroy。...网络请求,突然销毁activity,那么与之绑定的viewmodel也会销毁,同时我们onCleared()方法中取消网络连接接口(call.cancel()),就算是有数据返回,activity也不会收到通知...这个方式比较老了,源码中也能发现,ViewModelProviders的of方法其实也是调用了ViewModelProvider,自动创建了一个factory。

    66240

    Android-ViewModel和LiveData使用详解

    例如:Activity配置发生改变(屏幕旋转),Activity就会重新创建,onCreate()方法也会重新调用。...直到当前Activity被系统销毁,Framework会调用ViewModelonCleared()方法,我们可以onCleared()方法中做一些资源清理操作。...观察者可以每次应用程序数据更改时更新UI,而不是每次发生更改时更新UI。 没有内存泄漏 当观察者被绑定他们对应的LifeCycle以后,当页面销毁他们会自动被移除,不会导致内存溢出。...* 定义ViewModel和创建LiveData * ViewModel是以关联生命周期的方式来存储和管理UI相关的数据的类,即使configuration发生改变(比如旋转屏幕),数据仍然可以存在不会销毁...Framework会调用ViewModelonCleared() @Override protected void onCleared() { super.onCleared(); } }

    3.5K30

    Android-Jetpack笔记-ViewModel

    ViewModel处于数据逻辑层,他的生命周期贯穿整个宿主,如act因屏幕旋转销毁重建,其依然存活,只有act.finish后,才会自动销毁,因此可以用他来维持宿主的数据状态。...方法打印ViewModel的hashCode,可见屏幕旋转导致act重建,mCommonViewModel还是同一个实例, ?...= null) { // Restore the ViewModelStore from NonConfigurationInstances //act屏幕旋转重建...优缺点 优点: 页面退出,自动销毁 屏幕旋转、语言切换后数据不丢失,而onSaveInstanceState面对复杂数据需要序列化 不持有view层,方便单元测试 缺点: 虽然要比onSaveInstanceState...简单,但是viewModel只能在屏幕旋转和语言切换后的页面重建维持数据,当页面意外销毁时数据无法恢复,而这点onSaveInstanceState可以做到,关于viewModel如何实现这一点,可以看我的下一篇笔记

    76120

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

    (作用) ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。(特点) 到这里,你可能还是不清楚ViewModel到底是干啥的,别急,往下看。...1.1 出场背景 详细介绍ViewModel前,先来看下背景和问题点。 Activity可能会在某些场景(例如屏幕旋转)销毁和重新创建界面,那么存储在其中的界面相关数据都会丢失。...看到屏幕旋转而重新创建Activity后,ViewModel对象依然会保留。只有Activity真正Finish的ViewModel才会被清除。...onCleared(); } ... } ViewModel类 是抽象类,内部没有啥逻辑,有个clear()方法会在ViewModel将被清除时调用。...3、按下电源按键(关闭屏幕显示)。 4、从activity A中启动一个新的activity。 5、屏幕方向切换,例如从竖屏切换到横屏

    1.8K10

    Jetpack源码解析---ViewModel基本使用及源码解析

    简单来说:ViewModel是以关联生命周期的方式来存储和管理UI相关数据的类,即使configuration发生改变(例如屏幕旋转),数据仍然可以存在不会销毁....图中展示了当一个Activity经过屏幕旋转后的生命周期状态改变,右侧则是ViewModel的生命周期状态。...基本使用 3.1 数据存储 我们参考官方Demo实现一个计时器的功能,并且演示当屏幕发生旋转,计时器会不会重新启动: DemoViewModel class DemoViewModel : ViewModel...中存储了一个time值,fragment中启动计时器,当我们旋转屏幕的时候你会发现,计时器的值并没有变化,仍然按照旋转之前的数值进行计数。...的中的值 当ViewModel中的值发生变化时,更新SeekBar 同样,当旋转屏幕之后,SeekBar的值也不会改变。

    84220

    ViewModel三问—阿里真题

    由于ViewModel的生命周期是作用于整个Activity的,所以就节省了一些关于状态维护的工作,最明显的就是对于屏幕旋转这种情况,以前对数据进行保存读取,而ViewModel则不需要,他可以自动保留数据...ViewModel 为什么被设计出来,解决了什么问题? ViewModel组件被设计出来之前,MVVM又是怎么实现ViewModel这一层级的呢?...其实上面已经说过一些了,比如: 1)不会因为屏幕旋转而销毁,减少了维护状态的工作 2)由于作用域内单一实例的特性,使得多个fragment之间可以方便通信,并且维护同一个数据状态。...Activity重建存活下来,也就保证了ViewModel的状态不会随Activity的状态所改变。...; public final void clear() { for (ViewModel vm : mMap.values()) { vm.onCleared

    72210

    AAC---ViewModel

    ViewModel允许数据Configuration改变(比如屏幕旋转)保存,并且旋转后恢复。 UI Controller相关的Android框架则是Activity与Fragment。...使用ViewModel build.gradle中添加配置 dependencies { def lifecycle_version = "1.1.1" // ViewModel and...ViewModel中提供数据来源repository,如Room或者网络 在数据返回后,使用LiveData向UI Controller提供UI相关数据 public class MyViewModel...而当Activity被销毁,Framework会回调ViewModel对象的onCleared方法,以至于可以让我们该方法内部进行资源清理,避免内存泄漏。 ?...Fragment之间共享数据 通过同一个Activity获取到的ViewModel对象相同,所以可以通过ViewModelProvider获取到的ViewModel对象是同一个。

    79540

    ViewModel 和 LiveData:为设计模式打 Call 还是唱反调?

    ViewModel 对配置的重新加载(比如屏幕旋转)具有“抗性” ↑ 把视图层(Activity 或 Fragment)的引用传递给 ViewModel 是有 相当大的风险 的。...这样有几个好处: ViewModel 配置重新加载(比如屏幕旋转)的时候是不会变化的,所以没有必要从外部(比如网络和数据库)重新获取数据。...旋转屏幕是最明显的情况,我们已经 ViewModel 部分提到了。保存在 ViewModel 的状态是安全的。 但是,你可能需要在其他 ViewModel 也消失的场景中恢复状态。...实现这种机制有很多方法: 通过 ViewModel.onCleared() 可以通知数据仓库丢掉对 ViewModel 的回凋。...当一个 Activity 观察到repo ,相同的 LifecycleOwner 将用于 repository.loadRepo(id) 调用

    3.1K30

    ViewModel中引入协程

    AndroidX Lifecycle v2.1.0 ViewModel 中引入 viewModelScope,当 ViewModel 被销毁它会自动取消协程任务,这个特性真的好用。...ViewModel 引入协程 当我们 ViewModel 里面需要引入协程,首先要在 ViewModel 中新建一个 CoroutineScope, 用来管理所有协程任务,同时需要 onCleared...viewModelScope 方式 注意 lifecycle-viewmodel-ktx 版本号: 2.1.0-beta01 viewModelScope 管理协程的方式与我们 ViewModel 引入协程的方式一样...内部取消协程 ViewModel 类通过 HashMap 存储 CoroutineScope 对象,当使用 getTag(JOB_KEY) 方法获取对象不存在,创建一个新的 CoroutineScope...ViewModel 被销毁内部会执行 clear() 方法, clear() 方法中遍历调用 closeWithRuntimeException 取消了 viewModelScope 的协程,实现流程非常清晰

    1.4K30

    Android应用开发:屏幕旋转的非中断保存之setRetaineInstance

    当Activity销毁,Fragment会随之销毁。...而当Activity配置发生改变(如屏幕旋转)时候,旧的Activity会被销毁,然后重新生成一个新屏幕旋转状态下的Activity,自然而然的Fragment也会随之销毁后重新生成,而新生成的Fragment...生命周期 Activity的生命周期配置发生改变: onPuase->onStop->onDestroy->onStart->onResume 比如在Activity中发生屏幕旋转,其生命周期就是如此...other fragments");         }         mRetainInstance = retain;     } 如果想叫自己的Fragment即使在其Activity重做也不进行销毁那么就要设置...Fragment会跳过onDestroy直接进行onDetach(界面消失、对象还在),而Framgnet重组时候也会跳过onCreate,而onAttach和onActivityCreated还是会被调用

    89020

    Android中的简易协程:viewModelScope

    viewModelScope 对结构化并发 的贡献在于将一项扩展属性加入到 ViewModel 类中,从而在 ViewModel 销毁自动地取消子协程。...创建一个新作用域,并传入一个将在 onCleared() 方法中取消的 SupervisorJob,这样你就在 ViewModel 中添加了一个 CoroutineScope。...当 ViewModel 被清空,它会运行 clear() 方法进而调用如果不用 viewModelScope 我们就得重写的 onCleared() 方法。...() 是 final 的,这个方法模拟对象上仍会被调用, // 且在这些情况下,mBagOfTags 为 null。...因为单元测试应该在隔离状态下运行完好且不造成任何副作用,所以当测试完成,你应该调用 Dispatchers.resetMain() 来清理执行器。

    3.3K20
    领券