首页
学习
活动
专区
工具
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

    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还是会被调用

    89120

    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中的简易协程:viewModelScope

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

    3.3K20
    领券