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

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

ViewModel 和 LiveData 是 Android Jetpack 组件库中两个核心组件,它们能帮助开发者更有效地管理 UI 相关数据,并且能够在配置变更(屏幕旋转)保存和恢复 UI...用于ViewModel数据返回通知View更新,是ViewModel和View之间桥梁 那么如何在 Kotlin 中正确优雅地使用 ViewModel 和 LiveData 呢。...创建 ViewModel 类 ViewModel 用于存储和管理与 UI 相关数据,它能在配置变更继续存在。...更新和观察数据 当通过 ViewModel 来更新数据,观察者会自动收到通知并更新相应 UI 组件。...、 LiveData,可以实现数据生命周期感知,并且在配置变更(设备旋转)也能保持 UI 状态。

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

ViewModels 简单入门

一个简单例子 分三步骤来设置和使用ViewModel: 通过创建一个扩展 ViewModel 类来从UI控制器中分离出你数据 建立你 ViewModel 和UI控制器之间通信 在 UI 控制器中使用...此外,ViewModels也不应包含包含对UI控制器(Views)引用元素,因为这将创建对Context间接引用。...基于这一点,我们来创建 UI控制器/ ViewMode l关联。在UI控制器中将 ViewModel 创建一个成员变量。...使用LiveData 额外好处是它是可观察:它可以在数据改变触发UI更新。可以在这里了解更多关于LiveData信息。...一般来说,如果某屏应用中有瞬态数据,则应该为该屏数据创建一个单独ViewModel。 ViewModel生命周期从关联UI控制器首次创建开始,直到完全销毁。

1.1K70

再谈协程之viewmodel-livedata难兄难弟

优势: 简单,用于一次性请求数据简单快捷 ❝粘滞事件:发送消息事件早于注册事件,依然能够接收到消息粘滞事件 ❞ 简单,是LiveData还在业务场景下大范围使用重要原因(还保留给Java代码使用也是一部分原因...由此可见,LiveData作为一个数据观察者实现,完全是可以脱离ViewModel单独在Activity中使用,但是,这样做与直接使用RxJava之类异步框架并没有太大区别,Google这套AAC...使用时候,viewModels委托已经给出了自定义Factory入口。...{ ParamViewModelFactory(factory) } 我们直接创建ViewModel实例来使用,参考系统ComponentActivityviewModels拓展,创建一个自定义...: 创建一个ViewModel私有的MutableLiveData(MLD) 暴露一个不可变LiveData 启动协程,然后将其操作结果赋给MLD UI使用: class TestActivity

1.1K40

ViewModels and LiveData- Patterns + AntiPatterns

当试图更新不存在视图,不会发生空指针异常。 ViewModels不引用视图,所以内存泄漏风险较小。...建议有一个单独存储库类作为处理这种复杂性单一入口。 如果你有多个非常不同数据模型,可以考虑添加多个存储库。...img 你可以把数据包装在一个有状态和其他元数据(错误信息)类中。...为了有效地保存和恢复UI状态,可以使用持久性、onSaveInstanceState()和ViewModels组合。 对于一个例子,请看。...这显然是有效。 然而,如果用户旋转手机,新Activity被创建并开始观察。当LiveData观察开始,该Activity立即收到旧值,这导致消息再次显示出来。

1.1K30

聊聊类组件到函数组件变迁

最近一直在学习 React,在看到 React Hooks 一章联想到 Compose ,简直有着异曲同工之处,他们都是由 UI 组件、State 状态、Effect 副作用构成,而且,Android...原生 原生在拥有 Jetpack Compose 之后,也具备了像前端那样,基于函数式组件来描述当前 UI 界面的能力,如下是一个累加组件: @Composable fun HomeWidget()...中,我们有 componentDidMount、componentWillUnmount 等生命周期函数,那基于函数式组件,他是如何在函数中感知生命周期呢?...省略累加控件 } } 在进入组合项,LaunchedEffect 设置 true,使其不具备监听任何状态变化能力(remember),在延迟 1s 后会打印 Log,之后无论怎么操作其他控件都不会使其响应...,如下是官网监听 onStart、onStop 示例: 参考资料: 使用 Effect Hook – React[1] Compose附带效应[2] 参考资料 [1] 使用 Effect Hook

3.5K20

Android Studio Arctic Fox (2020.3.1) Beta 版发布

得益于社区反馈,我们大家提供并更新了这套工具,旨在赋能三大主题: 快速 UI 设计 - 使用 Jetpack Compose创建现代 UI 从未如此简单。...我们提供各种工具以帮助您完成设计之旅: 在不同配置中创建预览,用 Compose Preview 导航您代码,用 Deploy Preview to Device 进行单独测试,用 Layout Inspector...,按三大主题组织: 设计 Compose Preview - 用 Compose Preview 创建 Compose UI 预览!...通过使用 @Preview 注释,Compose Preview 可以在不同配置 (即主题、设备) 下一次可视化多个组件,并为您创建一个心理地图来导航您代码。...无论您应用是完全用 Compose 编写布局,还是混合使用Compose 和 View,Layout Inspector 都能帮助您了解布局如何在设备或模拟器上呈现,获得丰富细节 (传递给每个

34520

Jetpack Compose Beta 版现已发布!

时机正好,不妨趁现在开始学习 Compose,并着手规划今年 1.0 版发布之后,您将如何在接下来项目或功能中使用该工具包。...您可以在 Android 视图中嵌入 Compose UI,并在 Compose使用视图。我们在 互操作性文档 中提供了多种应用策略。...Compose 完全使用 Kotlin 构建,可利用其优秀 语言特性 提供功能强大、简洁且直观 API。例如,借助 协程,我们可以编写更简单异步 API,描述手势、动画或滚动。...我们还提供了 8 个 官方示例应用,方便您直接开始使用并了解 Compose 实际应用。这些示例从简单到复杂,每个都会展示不同 API 和用例。请参阅 readme,了解更多详情。...现在时机正好,不妨开始学习 Jetpack Compose,并规划如何在接下来项目中使用该工具包。

5.6K10

掌握 Jetpack Compose State,看这篇就够了

Jetpack Compose 是响应式 UI 框架。当我们更新 UI 状态Compose 会自动刷新 UI,将状态变化同步到界面上。...此时它会重新执行mutableStateOf()这段代码,重新创建出一个状态实例,并用一个值trueenabled变量来渲染界面。...使用mutableStateOf()在ViewModel中创建表示状态MutableState实例,在ViewModel内更新 UI 状态,UI 界面能通过这个暴露出来状态进行 UI 刷新。...通过修改状态更新可组合项目随着我们越多地使用 Compose 自带可组合项(Scaffolds、BottomSheet、Drawer等),我们会意识到在 Jetpack Compose 中状态是无处不在...要做到这点,需要引入相关拓展方法。这些拓展方法会帮我们把响应式实例转换成 Jetpack Compose状态实例。如何在 Jetpack Compose使用 Kotlin Flow?

7.3K111

七天学会ASP.NET MVC(七)——创建单页应用

创建ViewModel 项 在ViewModel 文件夹下新建类库项“ViewModel“ 5. 添加引用 以上创建项目添加引用,如下: 1....接下来我们先了解一下Areas概念 Areas Areas是实现Asp.net MVC 项目模块化管理一种简单方法。 每个项目由多个模块组成,支付模块,客户关系模块等。...在传统项目中,采用“文件夹”来实现模块化管理,你会发现在单个项目中会有多个同级文件夹,每个文件夹代表一个模块,并保存各模块相关文件。...在ASP.NET MVC应用中添加area,Visual Studio会自动创建并命名为“[AreaName]AreaRegistration.cs”文件,其中包含了AreaRegistration...之前所说,Controller存放路径是不受限制,因此它可以工作但可能不会正常显示,因为无法找到合适View。

4.3K60

Compose Preview UX 设计之旅

当我们团队第一次听说这个项目,我们无比期待 Compose 项目的无限可能,它具有将逻辑和数据混合绑定到 UI 潜力,以及开发者解锁新能力。...集思构想: 冲刺设计方案 为了探究如何在 Compose 中支持这种开发 UI 代码新模式,我们团队和我们软件工程师、开发者关系工程师和产品管理伙伴一起举办了一个研讨会,以解决一个设计挑战: 我们如何利用开发者对现有工具使用经验来帮助他们创建和掌握...我们邀请了开发者来加入我们 Coding Session,在一个以研究目的而创建 Compose 项目中完成一些简单编程练习。...例如,在创建 UI ,开发者会更倾向于使用 Refresh 模式,而在使用手势/交互,他们会切换到 Interactive 模式,至于 Deploy 模式,则最常用于故障排除和验证检查。...有趣是,在创建 UI 并查看它们渲染方式,我大部分时间都不需要使用它。"

83930

再探Kotlin 跨平台——迁移Paging分页库至KMM

前言 KMM发展除了靠官方社区支持外,一些大企业开源落地也尤为重要。从这些开源中我们需要借鉴他设计思想和实现方式。从而在落地遇到问题,寻得更多解决办法。...如果你之前从未使用过Paging库,可以参考许久之前我写两篇相关文章: 在View中使用Paging3分页库 在Compose使用分页库 接下来我们就以multiplatform-paging-samples...例,来看如何实现在Multiplatform使用Paging库。...也就是github主页上搜索功能。App运行截图如下所示。  这里我们搜索关键词“MVI”,左侧输出作者/项目名 右侧start数量,且实现了分页功能。接着我们来看这个项目结构是怎么样。...定义查询数据方法 这里还定一个一个查询数据方法,使用flow分发分发给UI层,代码如下所示: suspend fun produceViewModels(     events: Flow<Event

1.1K20

03.HTML头部CSS图像表格列表

注意: 加载页面,要注意插入页面图像路径,如果不能正确设置图像位置,浏览器无法加载图片,图像标签就会显示一个破碎图片。 更多实例 排列图片 本例演示如何在文字中排列图像。...浮动图像 本例演示如何使图片浮动至段落左边或右边。 设置图像链接 本例演示如何将图像作为一个链接使用创建图像映射 本例显示如何创建带有可供点击区域图像地图。其中每个区域都是一个超级链接。...无序列表使用 标签 浏览器显示如下: HTML 有序列表 同样,有序列表也是一项目,列表项使用数字进行标记。 有序列表始于 标签。每个表项始于 标签。...列表项使用数字来标记。 浏览器中显示如下: HTML 自定义列表 自定义列表不仅仅是一项目,而是项目及其注释组合。 自定义列表以 标签开始。每个自定义列表项以 开始。...每个自定义列表项定义以 开始。 浏览器显示如下: 注意事项 - 有用提示 提示: 列表项内部可以使用段落、换行符、图片、链接以及其他列表等等。

19.4K101

Docker-Compose基础与实战,看这一篇就够了

what & why Compose 项目是 Docker 官方开源项目,负责实现对 Docker 容器集群快速编排。使用前面介绍Dockerfile我们很容易定义一个单独应用容器。...默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载卷),以保证新启动服务匹配 docker-compose.yml...如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态容器,而忽略已经运行服务。... docker-compose -f skywalking.yml down stop 格式 docker-compose stop [options] [SERVICE...]停止已经处于运行状态容器... docker-compose -f skywalking.yml logs 查看整体日志,docker-compose -f skywalking.yml logs elasticsearch 查看单独容器日志

1.7K10

Docker-Compose基础与实战,看这一篇就够了i

what & why Compose 项目是 Docker 官方开源项目,负责实现对 Docker 容器集群快速编排。使用前面介绍Dockerfile我们很容易定义一个单独应用容器。...默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载卷),以保证新启动服务匹配 docker-compose.yml...如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态容器,而忽略已经运行服务。...down 此命令停止用up命令所启动容器并移除网络,docker-compose -f skywalking.yml down stop 格式 docker-compose stop [options...docker-compose -f skywalking.yml logs 查看整体日志,docker-compose -f skywalking.yml logs elasticsearch 查看单独容器日志

1.7K62

回顾 | Android Jetpack 重要更新

不同于以往需要单独每个需要初始化组件定义 ContentProvider,App Startup 可以利用一个共享 ContentProvider 来同时定义多个组件初始化操作,这样可以有效加快应用启动速度...MotionLayout — Android 创建流畅可交互动画 MotionLayout API 在 ConstraintLayout 丰富功能基础上,可以帮助 Android 开发者开发复杂动画效果...Webkit 库 Jetpack Webkit 开发库在 1.2.0 版本(最新版 1.4.0-rc01) 中新增了一个强制使用深色主题显示内容 API。...Jetpack Compose — 全新 Android UI 开发框架 Jetpack Compose 是全新现代 Android UI 开发框架,目前发布了开发者预览第二版。...您可以查阅我们 Alpha 版本发布文章、深入详解 Jetpack Compose 之 优化 UI 构建 和 实现原理 等文章了解更多。

23540

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

由于保持缓存和数据库与网络同步算法通常很琐碎复杂,所以建议每个仓库创建一个类作为处理同步单一入口。 如果是许多种并且差别很大数据模型,考虑使用多个数据仓库。...例如,当操作系统因资源不足杀死进程。 为了高效地保存和恢复 UI 状态,组合使用 onSaveInstanceState() 和 ViewModel。...这里有个示例:ViewModels: Persistence, onSaveInstanceState(), Restoring UI State and Loaders 事件 我们管只发生一次操作叫做事件...但是,如果用户旋转手机,则新 Activity 被创建并开始观察这个字段。当对 LiveData 观察开始,Activity 会立即收到已经使用值,这将导致消息再次显示!...看下面这个图,其中 Presenter 层使用观察者模式,数据层使用回调: ? UI观察者模式和数据层中回凋 如果用户退出 APP,视图就消失了所以 ViewModel 也没有观察者了。

3K30

Android Compose开发

可组合函数是一种特殊函数,不需要返回任何 UI 元素,因为可组合函数描述是所需屏幕状态,而不是构造界面 widget;而如果按我们以前 XML 编程方式,必须在方法中返回 UI 元素才能使用它(...以下示例在每个表项之间添加了 4.dp 间距: verticalArrangement = Arrangement.spacedBy(4.dp), 性能 早期 Lazy Layout 性能很差,滚动时候巨卡无比...您可以使用修饰符来执行以下操作: 更改可组合项大小、布局、行为和外观 添加信息,如无障碍标签 处理用户输入 添加高级互动,使元素可点击、可滚动、可拖动或可缩放 修饰符是标准 Kotlin 对象。...remember 和 mutableStateOf 在 Composable 函数中几乎永远都是配套使用使用 by 关键字替代了之前等号,用委托方式来 count 变量赋值。...它会自动在适当时间启动和取消协程,确保在 Compose 组件生命周期内正确处理副作用。当组件被创建,LaunchedEffect 会启动协程,当组件被销毁,它会自动取消协程。

26310
领券