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

片段恢复时,LiveData未重新发出

片段恢复是Android开发中的一个概念,用于在Activity或Fragment因系统配置变化(如屏幕旋转)或其他原因导致被销毁重建时,恢复之前状态的数据。LiveData是一种可观察的数据持有者,它可以感知生命周期,并在数据变化时通知观察者。

当片段发生恢复时,LiveData不会重新发出之前的数据。这是因为LiveData遵循观察者模式,它会在观察者注册后,只发送最新的数据给观察者。如果在片段销毁前LiveData的数据已经发生变化,那么在片段恢复后,观察者将会收到最新的数据。

对于这个问题,我们可以做以下回答:

概念:片段恢复是Android开发中的一个概念,用于在片段因系统配置变化或其他原因导致被销毁重建时,恢复之前状态的数据。

LiveData:LiveData是一种可观察的数据持有者,它可以感知生命周期,并在数据变化时通知观察者。LiveData在片段恢复时不会重新发出之前的数据。

优势:LiveData具有生命周期感知能力,可以自动处理订阅者的生命周期,避免内存泄漏。它还具有更新频率控制、数据一致性和版本管理等优势。

应用场景:LiveData在需要实时更新UI的情况下非常有用,例如聊天应用、实时数据监控等。

推荐的腾讯云相关产品:腾讯云提供了丰富的移动开发解决方案,包括移动推送服务、移动直播 SDK、移动短信服务等。这些产品可以与LiveData结合使用,实现实时数据推送和更新。

产品介绍链接地址:腾讯云移动开发解决方案(https://cloud.tencent.com/solution/mobile-development)。

注意:本回答不包含任何流行的云计算品牌商,如亚马逊AWS、Azure、阿里云等。

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

相关·内容

  • 谁能取代Android的LiveData- StateFlow or SharedFlow?

    当这个Flow被收集,它运行传递给flow builder的代码块,添加GeoQuery监听器并到达awaitClose {},在那里它暂停运行,直到Flow被关闭(也就是说,直到没有人在收集,或者直到它因任何捕获的异常而被取消...,该循环程序将在onStop()暂停,并在onStart()恢复,但它仍将被订阅到该流。...创建、销毁、初始化、恢复、开始。不存在STOPPED和PAUSED状态。当生命周期到达onPause(),它没有进入一个新的状态,而是回到了STARTED状态。...一旦没有订阅者,它的上游收集就会停止,一旦第一个订阅者重新出现,就会重新启动。...如果连接尝试失败,我们将发出SERVICE_DISCONNECTED。

    1.5K20

    安卓开发中的Model-View-Presenter(MVP模式)

    (在编写本文,我们只有map和switchmap)。...View 在Android中,我们的视图的实现将对应于一个活动或一个片段(在示例/项目中是片段),但它可以是一个ViewModel,甚至是一个可视化组件。...这里不讨论视图是由N个片段组成的活动的情况,因为每个片段都有M个演示者,我们可以假设视图是这些片段中的每一个,尽管它们随后被分组到一个片段中(甚至在另一个片段中)。...由于在这个体系结构中,我们的组件是接收事件和发出信息的黑盒,因此很容易验证在接收X事件发出了信息Y。...此外,这个视图模型可以直接将数据绑定注入到XML中,并使用LiveData将可视化组件绑定到LiveData的可观察对象。

    1.6K30

    Android Jetpack - LiveData

    事件 不再需要手动处理生命周期 UI 组件只是观察相关数据,不会停止或恢复观察。...LiveData 自动管理所有这些,因为它在观察意识到相关的生命周期状态变化 始终保持数据最新 如果生命周期变为非活动状态,它将在再次变为活动状态接收最新数据。...例如,后台活动在返回前台后立即接收最新数据 配置更改友好 如果由于配置更改(例如设备轮换)而重新创建活动或片段,则会立即接收最新的可用数据 资源共享 你可以使用单例模式扩展 LiveData 对象以包装系统服务...UI 控制器在其处于活跃状态立即显示数据,只要应用组件处于 STARTED 状态,它就会从它正在观察的LiveData 对象中接收最新值 class MainActivity : AppCompatActivity...与 Room 一起使用 LiveData Room 持久化库支持可观察查询并返回 LiveData 对象,这些查询一般在 DAO 中编写 在更新数据库,Room 会生成更新 LiveData 对象所需的所有代码

    2K30

    (StateFlow & ShareFlow) VS (Flow & LiveData)来看业务适合哪个?

    的时候执行这个扩展函数;但是这两个Flow不一样他们不依赖于外部调用(可配置稍后说明),他们是热流,他们发出的数据会缓存起来当有订阅者的时候再通知订阅者StateFlow 和 SharedFlow是发出状态更新并向多个使用方发出值并且可以通过...类似于观察数据,数据更新,使用方接受最新数据是不是和LiveData很像。...生命周期过长不采取一般在对数据进行处理的时候会使用2.lifecycleScope: 此范围内启动的协程会在 Lifecycle 被销毁时取消;也可以通过when生命周期来指定何时开启,如果 Lifecycle 至少处于所需的最低状态...(超出该作用域flow下游逻辑取消)repeatOnLifecycle针对生命周期取消订阅流的收集(上游)collect函数(符合在开启新协程重新订阅),WhileSubscribed策略配置订阅者超时时间进行取消...行为政策链接除此之外还可定义其他SharedFlow 行为:通过 replay,您可以针对新订阅者重新发送多个之前已发出的值。

    65140

    (StateFlow & ShareFlow) VS (Flow & LiveData

    类似于观察数据,数据更新,使用方接受最新数据是不是和LiveData很像。...确实像,但他比LiveData更强大~~ StateFlow 线程切换:相比于LiveData更新数据的操作只能在主线程进行,但是Flow可以通过flowOn来在不同的Dispatchers(线程分发器...生命周期过长不采取一般在对数据进行处理的时候会使用 2.lifecycleScope: 此范围内启动的协程会在 Lifecycle 被销毁时取消;也可以通过when生命周期来指定何时开启,如果 Lifecycle 至少处于所需的最低状态...(超出该作用域flow下游逻辑取消) repeatOnLifecycle针对生命周期取消订阅流的收集(上游)collect函数(符合在开启新协程重新订阅),WhileSubscribed策略配置订阅者超时时间进行取消...行为政策链接 除此之外还可定义其他SharedFlow 行为: 通过 replay,您可以针对新订阅者重新发送多个之前已发出的值。

    99140

    Kotlin上的反应式流-SharedFlow和StateFlow

    第一个事件是在还没有订阅者的情况下发出的,所以它将永远丢失。 当SharedFlow发出第二个事件,它已经有了一个订阅者,这个订阅者得到了上述事件。...当这种情况发生,SharedFlow有两种选择,它要么缓冲该事件,并在恢复将其发射给suspend的订阅者,要么在没有足够的缓冲区留给该事件造成缓冲区溢出。...当订阅者恢复,Flow也会恢复,将事件传递给所有订阅者并继续其工作。...当它到达第二个事件,缓冲区没有更多的空间了,所以它suspend了。 Flow保持suspend,直到订阅者恢复。一旦它恢复,它就会得到缓冲的第一个事件,以及最新的第二个事件。...不久之后,suspend的用户恢复,触发SharedFlow向它发出缓冲的事件,并清理缓冲区。

    2.2K60

    细说Jetpack中那些LiveData

    block中的代码会在LiveData标为活跃状态后只执行,且正常情况下只会执行一次。LiveData的非活跃到活跃状态的切换发生在注册在其身上的活跃的observer从0变为1。...当因为LiveData的状态由活跃状态变为非活跃状态的时候,会发起取消掉代码块中的任务,但会有个时间间隔,超过了时间LiveData还未恢复活跃态,会被取消掉。这个超时时间默认为5s。...因为上述原因被取消掉的任务还会被重新执行。一旦执行成功了就不会再执行。 内部实现代码有删减只保留关键部分。...当LiveData再次处于活跃状态也不会执行了。 一旦任务被取消成功注释8处,runningJob会被置空,注释5处 当LiveData重新处于活跃状态block代码块就会被重新执行。...SavingStateLiveData销毁重建能够自动恢复销毁前的数据。

    63720

    Jetpack:LiveData

    LiveData是一个可被观察的数据持有者类。...与常规的Observable不同,LiveData能意识到应用程序组件的生命周期变化,这意味着它能遵守Activity、Fragment、Service等组件的生命周期 1.优点 (1)确保UI符合数据状态....LiveData遵循观察者模式.当生命周期状态改变,LiveData会向Observer发出通知去更新UI...(3)不需要手动处理生命周期.UI组件只需要去观察相关数据,不需要手动去停止或恢复观察。LiveData会进行自动管理这些事情,因为在观察,它会感知到相应组件的生命周期变化。...(4)始终保持最新的数据.如果一个对象的生命周期变到非活跃状态,它将在再次变为活跃状态接收最新的数据。 例如,后台Activity在返回到前台后立即收到最新数据。

    59620

    Android JetPack~LiveData(二) 数据倒灌问题

    1、数据倒灌的出现 场景: 如果我们在一个home页面获取网络数据,然后通过LiveData的观察者特性,在回调中跳转B页面,当旋转屏幕,页面重建,LiveData又发来最后一次数据,那么直接触发了跳转...在页面重建LiveData自动推送最后一次数据供我们使用。 官方描述:ViewModel 将数据保留在内存中,这意味着开销要低于从磁盘或网络检索数据。...倒灌原因小结 Activity异常销毁然后重建,ViewModel会保存销毁之前的数据,然后在Activity重建完成后进行数据恢复,所以LiveData成员变量中的mVersion会恢复到重建之前的值...但是Activity重建后会调用LiveData的observe()方法,方法内部会重新new一个实例,会将mLastVersion恢复到初始值。...由于LiveData本身的特性,Activity的生命周期由非活跃变成活跃LiveData会触发事件分发,导致屏幕旋转或者切换系统语言后出现数据倒灌。

    2K20

    改造 Android 官方架构组件 ViewModel

    和 Fragment 等具有生命周期特性的组件绑定在一起, 在生命周期发生改变停止或恢复之前的事件 简而言之就是, 当某个页面请求网络数据成功后需要同步 UI, 但这个页面已经不可见, 这时就会停止同步...于是我认真的研究了其源码, LiveData 具有两个功能, 通知观察者更新数据和根据生命周期停止和恢复之前的事件, 而 Rxjava 加上 RxLifecycle, RxJava 加上 AutoDispose..., 或 Rxjava 加上生命周期组件, 也可以轻易做到根据生命周期停止和恢复之前的事件, 在配上 Rxjava 强大的操作符, LiveData 能做的事 RxJava 都能做, LiveData 不能做的事...RxCache, RxLifecycle, RxAndroid, RxPermission, Retrofit-Adapter 等大量并且强大的衍生库, 我们离开它做很多事都非常不便, 刚刚出生, 羽翼丰的...中的 onActivityCreated 方法中获取 ViewModel , Activity 每重建一次, 获取的 ViewModel 都是重新构建后的新实例, 并不能让 ViewModel 以及

    75310

    Jetpack源码解析—LiveData的使用及工作原理

    当生命周期状态改变LiveData会向Observer发出通知。 您可以把更新UI的代码合并在这些Observer对象中。...4.不需要手动处理生命周期 UI组件只需要去观察相关数据,不需要手动去停止或恢复观察。LiveData会进行自动管理这些事情,因为在观察,它会感知到相应组件的生命周期变化。 5....正确应对配置更改 如果一个Activity或Fragment由于配置更改(如设备旋转)而重新创建,它会立即收到最新的可用数据。...LifecycleBoundObserver生命周期变化时,dispatchValue下发更新LiveData中的值 当LiveData主动setValue,会主动dispatchValue,并且会...不处于活动状态(例如onPasue()、onStop())LiveData是不会回调observe()的,因为没有意义.

    1K20

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

    你也不想在你不需要的时候重新从数据库加载数据。让我们看一个 activity 的例子,在这个 activity 中你可以搜索你的音乐库: ? Activity 搜索及搜索后的状态示例。...onSaveInstanceState 是用于存储在 UI 控制器被系统终止又重建后可以轻松地重新加载 activity 状态所需的少量数据。...一般地,当我在 Android 手机上关闭然后重新打开 Chrome ,返回到了关闭 Chrome 之前正在浏览的页面。...此外,当你通过 intent 打开一个 activity,配置更改和系统恢复这个 activity bundle 参数都会被传进来。...Room 确保你的数据库更新LiveData 被通知到。 ? 由于 Loader 在 UI 控制器中作为回调被实现,因此 ViewModel 的一个额外优点是将 UI 控制器与数据加载分离开来。

    3.8K30

    ViewModels and LiveData- Patterns + AntiPatterns

    ViewModel在配置变化时被持久化,所以当重新请求发生,不需要重新查询外部数据源(如数据库或网络)。 当长期运行的操作结束,ViewModel中的观察变量会被更新。数据是否被观察并不重要。...然而,你可能需要在ViewModels也消失的其他情况下恢复状态:例如,当操作系统资源不足并杀死了你的进程。...事件的概念与LiveData存储和恢复数据的方式并不完全相符。考虑一个有以下字段的ViewModel。...当LiveData观察开始,该Activity立即收到旧的值,这导致消息再次显示出来。 与其试图用库或架构组件的扩展来解决这个问题,不如将其作为一个设计问题来面对。...如果你需要更多的功能,扩展LiveData会让你知道什么时候有活跃的观察者。例如,当你想开始监听一个位置或传感器服务,这很有用。

    1.1K30

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

    get() 方法内部首先会通过 ViewModel 的全限定类名从映射表(ViewModelStore)中取缓存,命中才会通过 ViewModel 工厂创建实例再缓存到映射表中。...ViewModel 底层是基于原生 Activity 因设备配置变更重建恢复数据的机制实现的,这个其实跟 Fragment#setRetainInstance(true) 持久 Fragment 的机制是相同的...当 Activity 因配置变更而重建,我们可以将页面上的数据或状态可以定义为 2 类: 第 1 类 - 配置数据: 例如窗口大小、多语言字符、多主题资源等,当设备配置变更,需要根据最新的配置重新读取新的数据...基于以上考虑,Activity 是支持在设备配置变更重建恢复 第 2 类 - 非配置数据 的,源码中存在 NonConfiguration 字眼的代码,就是与这个机制相关的代码。...又由于内存空间相对较大,因此可以存储大数据,但会受到内存空间限制; 2、onSaveInstanceState() :使用场景针对于应用被系统回收后重建对数据的恢复,由于应用进程在这个过程中会消亡,因此不能选择内存存储而只能选择使用持久化存储

    1.2K20

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

    你也不想在你不需要的时候重新从数据库加载数据。让我们看一个 activity 的例子,在这个 activity 中你可以搜索你的音乐库: Activity 搜索及搜索后的状态示例。...onSaveInstanceState 是用于存储在 UI 控制器被系统终止又重建后可以轻松地重新加载 activity 状态所需的少量数据。...一般地,当我在 Android 手机上关闭然后重新打开 Chrome ,返回到了关闭 Chrome 之前正在浏览的页面。...此外,当你通过 intent 打开一个 activity,配置更改和系统恢复这个 activity bundle 参数都会被传进来。...Room 确保你的数据库更新LiveData 被通知到。 由于 Loader 在 UI 控制器中作为回调被实现,因此 ViewModel 的一个额外优点是将 UI 控制器与数据加载分离开来。

    98420

    一篇掌握LiveData transformations

    在使用Android架构组件LiveData是一个很好的工具。在我知道如何使用Transformations类之前,我一直在滥用LiveData,并产生了大量的烂代码。...我在调解器创建时调用了更新函数,只有在两个源都是非空的情况下才会发出一个值。这种模式非常通用,但让我们一个一个地走完每一步。 方案1 在从这个LiveData发出任何东西之前,你想监控哪些源的变化。...(即让你对单个LiveData进行条件映射或合并多个LiveDatas) 方案2 如果你想在创建MediatorLiveData设置一个初始值,在这里调用内部更新函数。...在某些情况下,我不想发出一个初始值,因为我希望在a或b还没有设置的情况下发出空值。那么我就跳过在这里调用更新或设置初始值。...方案4 由于MediatorLiveData是一个LiveData实例,我们可以设置值(像上面的例子)或调用postValue(如果由于某种原因,你在发射值不在主线程上)。

    1.4K20
    领券