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

MVI中的共享ViewModel

是一种在Android应用程序中使用的架构模式,用于实现数据的共享和状态管理。MVI代表Model-View-Intent,它将应用程序的不同组件分为三个主要部分。

  1. Model(模型):模型代表应用程序的数据源,可以是本地数据库、网络请求或其他数据源。它负责管理数据的获取、存储和更新。
  2. View(视图):视图是用户界面的可视化部分,负责展示数据和接收用户的输入。它通过观察模型的状态来更新界面,并将用户的操作转化为意图(Intent)发送给ViewModel。
  3. Intent(意图):意图是用户的操作或者界面状态的表示,它描述了用户想要执行的操作。意图通过ViewModel传递给模型,模型根据意图的类型执行相应的操作。

共享ViewModel是MVI架构中的一个关键组件,它负责管理应用程序的状态和数据。它可以被多个视图共享,以确保应用程序中的不同部分都能够访问和更新相同的数据。

共享ViewModel的优势:

  • 状态一致性:由于共享ViewModel管理着应用程序的状态,因此不同的视图可以保持一致的数据状态,避免了数据不一致的问题。
  • 数据共享:共享ViewModel允许不同的视图共享相同的数据,避免了数据重复获取和存储的问题,提高了应用程序的性能和效率。
  • 解耦视图和模型:共享ViewModel作为中间层,将视图和模型解耦,使得它们可以独立演化和测试。

共享ViewModel的应用场景:

  • 多个Fragment共享数据:当一个Activity包含多个Fragment,并且它们需要共享相同的数据时,可以使用共享ViewModel来管理数据的获取和更新。
  • 多个Activity共享数据:当多个Activity需要共享相同的数据时,可以使用共享ViewModel来避免数据的重复获取和存储。
  • 跨组件通信:当不同的组件需要共享数据或者进行通信时,可以使用共享ViewModel来实现跨组件的数据传递和通信。

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

  • 腾讯云云服务器(CVM):提供弹性计算能力,满足不同规模应用的需求。产品介绍链接
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的云端存储服务,适用于图片、视频、文档等各类数据的存储和管理。产品介绍链接
  • 腾讯云数据库(TencentDB):提供多种类型的数据库服务,包括关系型数据库、NoSQL数据库等,满足不同应用场景的需求。产品介绍链接
  • 腾讯云人工智能(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等,帮助开发者构建智能化应用。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS 开发 ViewModel

有几种方案: UI 布局尽量用 IB 来做,把绑定逻辑放到 View 把绑定逻辑放到 Model 定义单独 ViewModel 加工 Model,并把适合展示数据输出给 View 以上这几种方案主要说是数据绑定...,优点是简洁明了,没有太多弯弯绕绕东西,基本就是把原本写在 Controller 代码放到了 View 。...方案二:Model 作为 ViewModel 这种方案我在一个演讲中看到过,思路也很简单,跟方案一恰恰相反,不是把 Model 注入 View ,而是把 View 注入 Model ,还是以 Profile...而众所周知继承在 Swift 是不被提倡,我这边声明Profile是个struct,是不能被继承,所以这种方案也并不是最合适方案。...,在我这个简单例子中表现并不比方案三普通 ViewModel 更好。

1.3K81

MVVM 进阶版:MVI 架构了解一下~

不过软件开发没有银弹,MVVM架构也不是尽善尽美的,在使用过程也会有一些不太方便之处,而MVI可以很好解决一部分MVVM痛点。...其次就是View层通过调用ViewModel方法来交互,View层与ViewModel交互比较分散,不成体系 小结一下,在我使用,MVVM架构主要有以下不足 为保证对外暴露LiveData...是不可变,需要添加不少模板代码并且容易遗忘 View层与ViewModel交互比较分散零乱,不成体系 MVI架构是什么?...MVI 与 MVVM 很相似,其借鉴了前端框架思想,更加强调数据单向流动和唯一数据源,架构图如下所示 [1240] 其主要分为以下几部分 Model: 与MVVMModel不同是,MVI...数据永远在一个环形结构单向流动,不能反向流动: [1240] 上面简单介绍了下MVI架构,下面我们一起来看下具体是怎么使用MVI架构 MVI架构实战 --------- 总体架构图 [1240

1.9K20

Android UI 架构演进:从 MVC 到 MVP、MVVM、MVI

MVI MVI 模式改动在于将 View 和 ViewModel 之间多数据流改为基于 ViewState 单数据流。...MVI 将代码分为以下四个部分: View: Activity 和 Layout XML 文件,与 MVVM View 概念相同; Intent: 定义数据操作,是将数据传到 Model 唯一来源...当然,实践应该根据状态之间关联程度来决定数据流个数,不应该为了使用 MVI 模式而强行将多个无关状态压缩在同一个数据流。...MVP、MVVM 和 MVI 对比 MVVM 和 MVP 思想是相同,最本质概念就是 Activity 里做事情太多了,所以要把 Activity 与 UI 无关部分抽离出来,交给别人做。...这个 “别人” 在 MVP 里叫作 Presenter,在 MVVM 里叫作 ViewModel。而不论是 MVP 约定接口,还是 ViewModel观察者模式,这些都是实现上细节而已。

87410

解决Android开发痛点问题用Kotlin Flow

那如果是要在Fragment调用Activity方法,通过共享ViewModel可行吗?...那有没有机会借用共享ViewModel做点文章? 分析问题 我们想要向ViewModel发送事件,并让所有依赖它组件接收到事件。...基于Flow/ChannelMVI架构 前面讲痛点问题,实际上是为了接下来要介绍MVI架构抛砖引玉。而MVI架构具体实现,也就是将上述解决方案融合到模版代码,最大程度发挥架构优势。...MVVM并没有约束View层与ViewModel交互方式,具体来说就是View层可以随意调用ViewModel方法,而MVI架构下ViewModel实现对View层屏蔽,只能通过发送Intent...结论 架构对SharedFlow和channelFlow使用绝对值得保留,就算不使用MVI架构,参考这里实现也可以帮助解决很多开发难题,尤其是涉及横竖屏问题。

3.1K20

一文了解MVI架构,学起来吧~

这让我想到“大明风华”一句台词 MVI架构 好了,废话说了这么多,我们来看MVI架构是什么样子,直接看官方网站一张图,如下所示: MVI 分为UI层、网域层、与数据层,我造个词叫他UDD,其中网域层可有可无...(其实相比较于MVVM基本没变化) MVII是Intent即为用户意图,如点击事件、刷新等都是Intent。那么MVI到底解决了MVVM什么问题呢?...UI监听代码如下所示: viewModel....} 这样一来,将事件管理、状态转化都放在了ViewModel,这样体现好处就是保证数据一致性,不通过页面也可以清晰看到有哪些事件、状态。...写在最后 相信看了这篇文章,你对在Android如何使用MVI有了一定了解,但一定要切记,架构没有好坏之分,适合项目本身架构就是好架构~  期待我们下篇文章再见~

1.1K30

Android应用架构未来:深入理解MVI模式及其优势

MVI,每个组件都有明确定义职责: 模型(Model):负责管理应用状态数据,并对外部事件做出响应。 视图(View):负责显示界面,并将用户操作转化为意图(Intent)。...在MVI,模型是不可变数据结构,它包含了应用程序所有状态信息。当视图接收到新状态时,它会重新渲染以反映最新状态。这种不可变性使得状态管理更加简单和可靠,因为状态不会被意外地修改或篡改。...它负责将模型状态呈现给用户,并且接收用户输入事件。在MVI,视图是无状态,它仅仅是一个渲染器,负责根据模型状态来更新界面。 Intent Intent代表用户意图或动作。...它是用户与应用程序交互途径,例如点击按钮、输入文本等。在MVI,意图是一种不可变数据结构,它描述了用户行为。当视图接收到意图时,它会将意图发送给处理程序来更新模型状态。...不可变性:MVI状态是不可变,任何状态更改都会产生一个新状态,这样可以确保状态一致性和可预测性。 适用场景: 复杂交互逻辑:适用于有复杂交互逻辑和状态管理需求应用。

30810

ViewModel引入协程

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

1.4K30

响应式架构最佳实践——MVI

❝如果你已经知道架构模式基本原则,以及MVVM和MVI模式细节,那么跳过基础知识,跳到文章MVI+LiveData+ViewModel(或第二部分)。...⭐ MVVM Architecture: 在Model-View-ViewModel架构,视图拥有ViewModel实例,它根据用户输入/动作调用相应函数。...总之,MVVM架构最好部分是ViewModel,但我认为它没有遵循MVC模式定义Model概念,因为在MVVM,DAO(数据访问对象)抽象被认为是Model,视图观察来自ViewModel多个可观察属性状态变化...在下面的架构,我试图结合MVVM和MVI模式优点,为任何Android项目提供更好架构,在此基础上,我通过为View和ViewModel创建基类,尽可能多地抽象出一些东西。...MVI + LiveData + ViewModel = ❤️ Architecture: 在继续之前,让我们重新强调一下MVI架构一些基本术语。

1.6K20

MVVM 成为历史,Google 全面倒向 MVI

例如,如上来自UI StateNewsItemUiState对象bookmarked标记在Activity类已更新,那么该标记会与数据层展开竞争,从而产生多数据源问题。...UI State集中管理优缺点 在MVVM我们通常是多个数据流,即一个State对应一个LiveData,而MVI则是单个数据流。两者各有什么优缺点?...便可获取页面的所有状态,相对 MVVM 减少了不少模板代码 添加状态只需要添加一个属性,降低了ViewModel与View层通信成本,将业务逻辑集中在ViewModel,View层只需要订阅状态然后刷新即可...当然在软件开发没有最好架构,只有最合适架构,各位可根据情况选用适合项目的架构,实际上在我看来Google在指南中推荐使用MVI而不再是MVVM,很可能是为了统一Android与Compose架构...因为在Compose并没有双向数据绑定,只有单向数据流动,因此MVI是最适合Compose架构。

1.7K10

Unity应用架构设计(5)——ViewModel之间如何共享数据

又因为ViewModel才是真正为View提供数据来源,所以本质上『共享数据』指的是多个ViewModel之间共享同一块数据控件。...JavaScript原型链 谈到『共享』两字,脑海里跳出第一个印象就是『继承』。对吧,因为你是父母孩子,所以理所当然你可以和父母共享家中一切。...所以『共享前提,就是构建一个『继承链』,也就是JavaScript『原型链』。 那么JavaScript是怎样实现原型链呢?...有经验JavaScript程序员想必早就记滚瓜烂熟了——通过内置属性 __proto__ 来实现。 所以ViewModel之间『共享数据』核心就是如何去实现一个继承链,如下所示: ?...小结 本篇文章介绍了怎样在ViewModel之间共享数据,实际上解决方案是非常简单,人为构造了一个继承链并随着继承链往上找,总是能找到希望获取到数据。

1.3K60

ViewModel 和 ViewModelProvider.Factory:ViewModel 创建者

朋友们好,今天我向大家介绍下 ViewModel 如何使用 ViewModelProvider.Factory. ---- 现在开始 所以,我们首要问题是:什么是 ViewModelProvider.Factory...让我们在不使用 ViewModelProvider.Factory 情况下,试着创建一个 ViewModel 看看: 在活动实例化: 有没有人注意到:当我们使用 ViewModelProviders...在活动实例化 MyViewModel 时,从未没用过 MyViewModel 构造方法,而都是使用 ViewModelProviders 这个类方法。...如果你想在构造方法添加参数,你需要编写自己 ViewModelProvider 来创建 ViewModel 实例。 什么是 ViewModelProvider.Factory?...现在就让我们通过 ViewModelProvider.Factory 在活动创建 ViewModel 实例。

1.6K20

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

前言 ViewModel 是 Jetpack 组件较常用组件之一,也是实现 MVVM 模式或 MVI 模式标准组件之一。在这篇文章里,我将与你讨论 ViewModel 实用和面试常见知识点。...ViewModel 作用可以区分 2 个维度来理解: 1、界面控制器维度: 在最初 MVC 模式,Activity / Fragment 承担职责过重,因此,在后续 UI 开发模式,我们选择将...Activity / Fragment 与视图无关职责抽离出来,在 MVP 模式叫作 Presenter,在 MVVM 模式叫作 ViewModel。...而 ViewModel 能够应对 Activity 因配置变更而重建场景,在重建过程恢复 ViewModel 数据,从而降低用户体验受损。...MVVM 模式示意图: MVI 模式示意图: ViewModel 生命周期示意图: 1.2 ViewModel 使用方法 1、添加依赖: 在 build.gradle 添加 ViewModel

1.1K20

Android通过ViewModel保存数据实现多页面的数据共享功能

通过ViewModel实现数据共享符合AndroidMVC设计模式,将数据独立出来 实现Demo 1、主页面通过SeekBar 来改变数字值 ?...2、点击进入就进入第二个界面,但是数据还是共享 ? 3、随便加两个数字上去,再次切换 ? 4、发现数据还是共享 ?...下面是具体实现步骤: 1、建立两个Fragment(使用了Binding 和 Navigation) 一点要添加Binding 和 Navigation 不然做不了 2、建立一个继承于ViewModel...类 3、分别在两个Fragment代码中使用继承于ViewModel那个类,就可以实现数据共享 下面是具体代码: 1、继承于ViewModel类 package com.example.naviation01...通过ViewModel保存数据实现多页面的数据共享功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

1.8K31

Architecture Components ViewModel控制。

思考三秒钟,联想到上一篇做法,可以想到利用Fragment和Activity添加Fragment来感知宿主生命周期。并且这里我们只需要监听销毁时候函数就行。下面进行具体分析。...); 代码很好理解,获取当前类ViewModel提供者,之后在传入需要获得ViewModel类型。...然后在onDestory方法调用mViewStoreclear方法,这里就会间接调用到ViewModelonCleared()方法。更多细节可以去看源码,这里简单总结一下都做了什么。...简单看一下,代码不难理解,先赋值成员变量,之后是查看ViewModelStore是否有传入类型ViewModel,没有的话就通过传入工厂类创建一个新ViewModel 添加到ViewModelStore...然后在HoldFragment持有一个集合用于保存当前宿主ViewModel,在onDestory函数调用集合clear方法,间接调用到ViewModelonCleared方法,实现生命周期控制

77990

Java屏幕共享

但是,如果你需要在 Java 应用程序拥有远程访问功能怎么办?在本文中,将展示一种方法,该方法允许使用JxBrowser功能在不同 PC 上运行两个 Java 应用程序之间实现屏幕共享。...为了在 Java 实现屏幕共享,将利用 Chromium 支持即时使用屏幕共享和 JxBrowser 提供对它编程访问这一功能。...第一个是带有按钮窗口。单击该按钮开始共享会话。第二个应用程序自动接收视频流并显示它。还有一个停止屏幕共享按钮。...结论在本文中,展示了如何在一个 Java 应用程序中共享屏幕并使用 JxBrowser 在另一个应用程序显示它。 我创建了一个可以共享屏幕简单 JavaScript 应用程序。...然后使用 JxBrowser 将它集成到两个 Swing 应用程序。借助 JxBrowser 提供捕获 API,丰富了标准 Java 应用程序屏幕共享功能。

1.8K20

Jetpack ComposeMVVM实现及ViewModel和remember对比

这意味着 ViewModel 数据会在相关联 ViewModelStoreOwner 存在时保持状态,直到它们生命周期结束。...数据共享: ViewModel: ViewModel 通常用于存储与界面相关持久性数据,它可以在多个组件之间共享,比如在同一个 Activity 不同 Fragment 之间共享数据。...数据持久性: ViewModel: ViewModel 数据通常具有较长生命周期,并且在配置更改(如屏幕旋转)时会被保留。...总的来说: ViewModel 适合用于管理持久性数据和在不同组件之间共享数据。 remember 则适合用于管理短暂 UI 状态和局部状态。...()) 这样自定义组件时使用数据时候复用时候就不方便,能不能让我们ViewModel实例在一个类是同一个实例呢?

39910

由浅入深,详解ViewModel那些事

所以,在现在开发,我们开始将 View数据 与 逻辑 藏于 ViewModel ,然后对外部暴漏观察者,比如我们常常会搭配 LiveData 一起使用,以此更容易保持状态同步。...get(ViewModel::xx) 从缓存获取现有的 ViewModel 或者 反射创建 新 ViewModel。...如果当前已创建,则直接使用;反之则调用我们 ViewModel工厂 create() 方法创建新 ViewModel。 创建完成后,并将其保存到 ViewModelStore 。...再从这个总 状态bundle 获取我们当前 viewModel 所对应状态。...结语 在本篇,我们从 ViewModel 背景开始,再到 ViewModel 与 SavedStateHandle 使用方式,最后又从源码层级分析了两者具体流程,从而较完整解析了 ViewModel

73340
领券