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

Android面试题之Kotlin Jetpack的三大核心组件

ViewModel 和 LiveData 是 Android Jetpack 组件库的两个核心组件,它们能帮助开发者更有效管理 UI 相关的数据,并且能够配置变更(如屏幕旋转)时保存和恢复 UI...用于ViewModel数据返回时通知View更新,是ViewModel和View之间的桥梁 那么如何在 Kotlin 中正确优雅使用 ViewModel 和 LiveData 呢。...创建 ViewModelViewModel 用于存储和管理与 UI 相关的数据,它能在配置变更时继续存在。... Fragment 中使用 ViewModel 如果在 Fragment 中使用 ViewModel,可以使用 viewModels 或 activityViewModels: import android.os.Bundle...一起使用的比较多 总结 通过 ViewModel 、 LiveData,可以实现数据的生命周期感知,并且配置变更(如设备旋转)时也能保持 UI 的状态。

4810

生命周期感知 Lifecycle

ViewModel 去获取数据数据更改通过 LiveData 响应到视图。...尝试编写数据驱动的 UI ,其中 UI 控制器的职责是在数据更改时更新视图,或者将用户操作通知给 ViewModel 。 将数据业务逻辑放在 ViewModel 类。...如果 ViewModel 生命超过 Activity (配置发生更改的情况下)可能会造成 Activity 泄漏,并且不被垃圾处理器回收。...还可以使用可识别生命周期的组件应用程序销毁时终止缓冲。 启动和停止网络连接。 使用可感知生命周期的组件可以应用程序处于前台状态时实时更新(流式传输)网络数据,并在应用程序进入后台时自动暂停。...不幸的是, onSaveInstanceState() 之后调用了 AppCompatActivity 的 onStop() 方法,这留下了一个空白,该空白,不允许 UI 状态更改,但生命周期尚未移至

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

Android-ViewModel和LiveData使用详解

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

3.4K30

Android Jetpack - Room

的单一事实来源,允许用户应用内查看关键信息的一致副本,无论用户是否具有互联网连接 处理重要数量的结构化数据的应用程序可以从本地保存数据受益匪浅。...最常见的用例是缓存相关的数据。这样,当设备无法访问网络时,用户仍然可以离线时浏览该内容。...然后,设备重新联机,任何用户启动的内容更改都会同步到服务器 Room 的三个主要部分包括 Database 包含数据库持有者,并作为应用程序的持久关系数据的基础连接的主要访问点。...然后,应用程序使用每个 DAO 从数据获取实体,并将对这些实体的任何更改保存回数据库。最后,应用程序使用实体来获取和设置与数据的表列对应的值 Room 组件关系图 ?...最常见的示例,Repository 实现了用于决定是从网络获取数据还是使用在本地数据缓存的结果的逻辑,既避免了 ViewModel数据的直接交互又统一了单一真实数据源的逻辑 Repository

1.9K70

Android Jetpack - Lifecycles

Android Jetpack - ViewModel ,我们实现了一个简易计时器,该计时器可以 Activity 处于配置更改或后台的情况下继续计时,我们现在利用 Lifecycle 修改它,让它只能在...ViewModel 将您的数据逻辑放在 ViewModel。...这使您可以使视图更具说明性,并最大限度减少活动和片段编写所需的更新代码。...这可能是一项艰巨的任务,但它可以使您的 UI 组件更容易测试 避免 ViewModel 引用 View 或 Activity 上下文。...一旦 ViewModel 存活时间超过活动(配置更改的情况下 Activity 会被多次重建),Activity 会因为垃圾回收器没有妥善处理而发生内存泄露 使用 Kotlin 协程来管理长时间运行的任务以及可以异步运行的其他操作

1.3K30

Android MVI框架搭建与使用

本文完成的效果图: 正文   每当一个新的框架出来,都会解决掉上一个框架所存在的问题,但同时也会产生新的问题,瑕不掩瑜,可以实际开发,解决掉产生的问题,就能够更好的使用框架,那么MVI解决了MVVM...四、ViewModel   MVI模式ViewModel的重要性又提高了,不过我们同样要添加Repository,作为数据存储库。...这里对_state首先赋值为Loading,表示加载,然后进行一个网络请求,结果就是成功或者失败,如果成功,则赋值Wallpapers,View收集到这个状态就可以进行页面数据的渲染了,请求失败,...采用的是ViewModelProvider(),而不是ViewModelProviders.of,这是因为这个API已经被移除了,之前的版本是过时弃用,最新的版本你都找不到这个API了,所以使用...initView()函数是控件的一些配置,比如给RecyclerView添加布局管理器和设置适配器,给按钮添加点击事件,点击的时候发送意图,发送的意图被MainViewModelmainIntentChannel

3.1K40

Android Compose 新闻App(二)ViewModel、Hlit、数据

五、源码 前言   在上一篇文章我们构建了网络框架了,现在可以页面通过liveData的Observe回调中看到网络数据的返回。...正文   Compose组件和Jetpack其他的组件可以很有效的结合起来,会使我们的程序解耦的更彻底。...的build.gradle配置顶部plugins{}闭包添加: id 'kotlin-kapt' id 'dagger.hilt.android.plugin' 这里增加hilt...②添加ViewModel依赖 下面我们添加ViewModel的依赖,其实主要就是对于Compose使用ViewModel的增强,依赖如下: implementation 'androidx.lifecycle...我们页面显示返回值,然后我们setContent调用initData(),这个网络数据返回再预览是看不出来的,我们通过虚拟机去显示这个返回值。

1.3K40

【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

ViewModel 数据发生了变化 , 如何将变化应用到视图组件 , 视图中显示最新的数据内容 , 此时就用到了 LiveData 组件 ; ViewModel 的基础上 , 通过 引入 LiveData..., 可以将 运行过程 ViewModel 的 Model 模型数据改变 通知 视图 View , 令视图组件显示最新的数据内容 ; ViewModel 中使用了 LiveData , 必须调用...使用核心要点 : 首先 , 启用 DataBinding , build.gradle 构建脚本 的 " android / defaultConfig " 配置 , 配置如下内容以 启用..., DataBinding 配置 Model 数据模型对象 或者 ViewModel 视图模型对象 , 本示例配置的是 ViewModel 实例对象 ; 配置 Model 数据模型对象...DataBinding 配置 ViewModel 视图模型对象 ; TextView 显示文本时 , 设置如下属性 , 由于显示的内容是 Int 数字 , 需要转为 String 才能显示 ;

1.3K20

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

ViewModel 能够应对 Activity 因配置变更而重建的场景,重建的过程恢复 ViewModel 数据,从而降低用户体验受损。...:1.0.0" // Hilt 注解处理器 kapt "androidx.hilt:hilt-compiler:1.0.0" 需要注意的是,虽然可以使用依赖注入普通对象的方式注入 ViewModel,...,因此这部分数据配置变更便失去意义,自然也就没有存在的价值; 第 2 类 - 非配置数据: 例如用户信息、视频播放信息、异步任务等非配置相关数据,这些数据跟设备配置没有一点关系,如果在重建 Activity...重建,系统通过 Activity#onAttach(…) 中将这一份数据传递到新的 Activity ; 阶段 3: Activity 构造 ViewModelStore 时,会优先从旧 Activity...对于 ViewModel 来说,相当于旧 Activity 中所有的 ViewModel 映射表被透明传递到重建新的 Activity ,这就实现了恢复 ViewModel 的功能。

1.1K20

《Android编程权威指南》之UI状态的保存与恢复篇

ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。...设备配置改变带来的内存泄漏是常见问题。 2.2 向ViewModel添加数据 ViewModel 会保存关联用户界面所需数据,并整理格式化这些数据,以方便其他对象取用。...三、进程销毁时保存数据 上面讲述的是发生屏幕旋转等配置更改的情况下,activity会被销毁和重启,这个时候可以用viewmodel来自动保存数据与获取数据。...通常,覆盖onSaveInstanceState(Bundle)函数,Bundle对象,保存当前activity小的或暂存状态的数据;覆盖onStop()函数,保存永久性数据,比如用户编辑的文字等。...因此,要处理设备配置更改 加上 系统发起的进程终止 两种情况,就结合使用 ViewModel 和 onSaveInstanceState() 方式来保存数据状态。

59610

【Jetpack】使用 Room 的 Migration 升级数据库 ( 修改 Entity 实体类 - 更改数据模型 | 创建 Migration 迁移类 | 修改数据库版本 | 代码示例 )

, 数据结构 , 发生了变化 , 需要进行更新 , 可以使用 Migration 迁移工具 升级数据库 ; 迁移 是指 将 数据库的结构 从一个版本 更改为 另一个版本 , 以适应新的数据模型 ; Room...应用程序的本地数据库,并且 在数据模型发生变化时,提供了强大的 迁移工具 Migration ,使开发人员能够 有效管理数据库结构的更改。..., 应用程序可以无缝将旧版本的数据库迁移到新版本,而不会丢失现有的数据。...二、Room#Migration 迁移工具使用要点 本章节以新增一个数据库表字段为例 , 【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 |..., 即更改数据模型 , 创建 Migration 迁移类 并 修改数据库版本 , 此时运行 , 手机应用已经创建了 版本 1 的数据库 , 数据库的基础上 , 运行 带 Migration(1,

82330

使用Lifecycle-Aware组件优化项目

包含以下几个组件模块: lifecycle 处理生命周期,创建一个自动响应生命周期事件的用户界面 LiveData 构建底层数据更改时通知试图的数据对象(数据驱动界面) ViewModel 存储未在应用旋转销毁的...ViewModel是以关联生命周期的方式来存储和管理UI相关的数据的类,即使configuration发生改变(比如旋转屏幕),数据仍然可以存在不会销毁。...对于一些简单的数据,Activity可以使用onSaveInstanceState()方法,并从onCreate的bundle重新获取,但这一方法仅仅适合一些简单的UI状态,对于列表型这种庞大的数据类型并不适合...总是最新的数据——当Activity从后台切到前台时,总会收到最新的数据。 适配设备配置变化——如屏幕旋转,组件销毁重建,立即收到上次的数据。...例如:那些需要在 onCreate 方法初始化, onStop 进行一些处理,onDestoty 进行释放的操作。(MVP 的 Presenter,MediaPlayer等)。

89720

Jetpack系列——ViewModel

对于Android传统的代码编写方式,一般,将页面UI的处理,数据的加载,全部放在Activity或Fragment中进行,但这并不满足“单一功能原则”,也不易于维护和扩展。...Jetpack为开发者提供了ViewModel的概念,将页面所需要的数据从V层和M层剥离出来,ViewModel是介于View层和Model层的一个桥梁,使得视图和数据即区分开来,又能保持联系。...[1240] 上述代码也介绍了最重要的一个点,那就是ViewModel实例的创建,首先需要创建一个ViewModelProvider类对象,其构造方法需要传入Activity实例,androidx...ViewModel不会受Actvity生命周期的影响,那是不是可以使ViewModel替代onSaveInstanceState()方法呢?...,但当页面被彻底销毁时,ViewModel数据也就不复存在了。

58410

是时候更新手里的武器了—Jetpack架构组件简析

数据绑定 “数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化)将布局的界面组件绑定到应用数据源。...刚才我们介绍的都是单向绑定,也就是布局view绑定了数据对象,那么如何数据对象也对view产生绑定呢?...主 Activity 与导航图相关联,且包含一个负责根据需要交换目的的 NavHostFragment。具有多个 Activity 目的的应用,每个 Activity 均拥有其自己的导航图。...官方文档 Demo代码地址 ViewModelViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。...对了,数据通信。不同的 Fragment 可以使用其父Activity共享ViewModel 来进行数据的通信,厉害吧。还有很多其他的用法,去项目中慢慢发现吧!

2.9K20

如何正确的 Android 上使用协程 ?

Android ,一般是不建议直接使用 GlobalScope 的。那么, Android 应该如何正确使用协程呢?再细分一点,如何直接在 Activity 中使用呢?...协程 Android 上的使用 GlobalScope 一般的应用场景下,我们都希望可以异步进行耗时任务,比如网络请求,数据处理等等。当我们离开当前页面的时候,也希望可以取消正在进行的异步任务。...这个时候大部分工作就要交给 ViewModel 了。那么如何ViewModel 定义协程作用域呢?还记得上面 MainScope() 的定义吗?没错,搬过来直接使用就可以了。...实际上,写完全篇,viewModelScope 仍然是我认为的最好的选择。 LiveData Kotlin 同样为 LiveData 赋予了直接使用协程的能力。... Activity/Fragment 等生命周期组件我们可以很方便的使用,但是 MVVM 又不会过多的 View 层进行逻辑处理,viewModelScope 基本就可以满足 ViewModel

2.7K30

Swift 掌握 Observation 框架

下面将介绍如何使用观察框架来处理应用程序数据流。使用 @ObservableRevenueCat 简化了实施应用内购买、管理客户和扩展应用业务的过程。...之后,我们可以观察 Store 类型的任何变量。我们 Store 类型只有一个变量,用于定义存储的状态。另一个字段是一个永不更改的 let 常量。...第一个闭包,我们可以访问可观察类型的所有必要属性。观察框架仅在触摸到的观察类型的任何属性更改才调用第二个闭包。...我们不需要 @ObservedObject 属性包装器来跟踪可观察类型更改,但我们仍然需要 @StateObject 替代项以 SwiftUI 生命周期中存活。..."Hello, \(viewModel.username)") } } }}你可以使用 @Bindable 属性包装器轻松从任何可观察类型的属性创建绑定。

20010

“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

3.2 实施 我们来举个完整的例子 - 页面显示用户信息列表,来说明 Jetpack MVVM 的具体实施。...应用的其他组件可以使用此存储器监控对象的更改,而无需它们之间创建明确且严格的依赖路径。...另外,我们也没有添加任何逻辑来处理配置更改(例如,用户旋转设备的屏幕)。...UserListViewModel 会在配置更改自动恢复,所以一旦创建新的 Activity,它就会接收相同的 ViewModel 实例,并且会立即使用当前的数据调用回调。...因此,如果用户离开页面再返回,则应用必须重新获取数据,即使数据未发生更改也是如此。这就浪费了宝贵的网络资源,迫使用户等待新的查询完成。

1.9K10
领券