Jetpack学习之MVVM实战

2023-11-05

MVVM架构与Jetpack

MVVM即Model-View-ViewModel的缩写,它的出现是为了将图形界面与业务逻辑、数据模型进行解耦。MVVM也是Google推崇的一种Android项目架构模型。而Jetpack组件,大部分是为了能更好的架构MVVM应用程序而设计的。
MVVM架构

Jetpack组件
  • Lifecycle:有了Lifecycle组件,当系统组件Activity、Fragment、Service和Application的生命周期发生变化时,自定义组件能够及时得到通知,使自定义组件与系统组件进一步解耦。
  • Navigation:处理导航所需的一切,包括页面的跳转、参数的传递、动画效果的设置,以及App bar的设置等。
  • ViewModel:负责处理和存放View与Model之间的业务逻辑,它直接对UI界面所需的数据负责,让视图和数据进行分离。并且ViewModel与生命周期相关,能自动处理由于屏幕旋转导致界面重新创建所带来的数据重新获取问题。
  • LiveData:在MVVM架构的层与层之间扮演着桥梁的作用。当数据发生变化时,通过LiveData让数据的订阅者得到通知。
  • Room:Google官方的ORM数据库,原生支持LiveData,在搭配LiveData使用时,当Room数据库中的数据发生变化时,LiveData使数据的订阅者能够及时得到通知,而无须从数据库重新获取数据。
  • WorkManager:为应用程序中那些不需要及时完成的任务提供统一的解决方案。
  • DataBinding:进一步解耦UI界面。DataBinding的出现让findViewById不复存在,使布局文件能够承担更多的工作,甚至能承担一些简单的业务逻辑。
  • Paging:为常见的3种分页机制提供了统一的解决方案。
天气App实战

天气数据来自聚合数据,免费使用,可以自己申请账号,替换其中的key。

目录结构

目录结构

  • api:负责网络数据的获取
  • db:负责数据库存储
  • model:天气、城市数据model
  • repository:根据需求从api或db获取数据
  • viewmodel:数据逻辑处理,天气、城市的LiveData
  • view:天气、城市显示界面

下载地址:使用Jetpack实现MVVM架构的天气App

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetpack学习之MVVM实战 的相关文章

  • 第一次调用后 LiveData 未观察到

    我实现了 LiveData 和 ViewModel 来模仿 AsyncTaskLoader 我从 DCIM 中的相机目录加载文件名 然后附加一个 fileObserver 来观察删除文件 图片 时的情况 然后回调告诉 LiveData 在发
  • 将图像从 Android 上传到 GCS

    我正在尝试将图像从 Android 直接上传到 Google 云存储 但API似乎不起作用 他们有一些与 App 引擎相关的 Java 示例 我没有看到任何被证明可以在 Android 上运行的示例 在 Android 上 我尝试使用 js
  • 在显示之前在后台加载 Activity

    在将视图切换到该活动之前 是否可以在后台加载新活动 例如 我想要一个被调用并显示启动屏幕的斜杠屏幕活动 当显示此启动屏幕时 将加载下一个活动 当加载完成时 当 onCreate 完成时 启动屏幕活动结束 并显示新的活动 我知道另一个选择是在
  • 如何使用MonkeyDevice.instrument?

    嗨 大家好 我正在尝试从 MonkeyRunner 脚本运行我的测试仪器之一 不幸的是我无法让它工作 我尝试使用不同的参数变量调用 MonkeyDevice instrument 但没有成功 我试过了 设备 MonkeyRunner wai
  • 在 Kotlin 中将 Dp 转换为 Px - 这种转换永远不会成功

    我在使用 Kotlin 编码时遇到了问题 我复制粘贴了一个java代码示例 https stackoverflow com a 9685690 6818446将 DP 转换为像素 以便将其作为以编程方式设置填充的参数 我原本期望 IDE 能
  • 如何使用 Android 加速计?

    我正在尝试构建一个应用程序来读取手机上加速度计的值 该应用程序仅支持 Android 2 1 如何使用 2 1 兼容代码读取加速度计 从这个开始 public class yourActivity extends Activity impl
  • 如何在屏幕上动态移动 Textview? (框架布局)

    我有一个应用程序 可以在屏幕上的 FrameLayout 上显示相机视图 屏幕处于固定风景模式 我需要编写一个带有动态确定的屏幕坐标的textView 坐标以百分比确定 例如 将文本视图写入屏幕坐标 x 80 y 20 屏幕上 将文本视图写
  • Android SDK 中缺少 Gradle(使用 cordova + ionic)

    是的 我搜索了这个 但没有搜索到任何内容 只是有关 ANDROID HOME 路径的信息 但就我而言 我认为这不是真正的问题 当我尝试做的时候ionic build android我收到这个错误 错误 在 android sdk 中找不到
  • Android - GC 滞后于列表视图滚动“更大”的图像

    在列表视图中 我想在列表条目上绘制一个图像 这 20 张图像必须缩放以填充垂直模式的宽度 手机分辨率为 480 x 800 像素 SGS2 图像分辨率为 400x400 大小约为 100KB 我已将图像放在可绘制文件夹中 当我滚动列表时 它
  • Android 计费客户端库:如何指定开发人员有效负载(额外数据)

    我正在尝试使用新的Android计费客户端库 1 0 https developer android com google play billing billing library html 以前 在尝试执行购买时 可以选择向意图添加额外的
  • 如何在活动之间传递大型集合(主从流)

    背景 我正在实现一个从网络服务读取有关电影信息的应用程序 该网络服务返回有关每部电影的一些信息 标题 日期 海报网址 导演 演员等 该 Web 服务支持分页 因此电影以 100 部为一组加载 执行 这个想法是显示一个包含所有海报的网格 当用
  • 离子和电容器 - Android 启动画面响应能力

    Context 这与闪屏图像响应能力有关 根据我的研究 它之所以发生是因为缺少文档电容器文档 启动画面 https capacitorjs com docs apis splash screen Problem 当实现电容器的闪屏插件时 问
  • 在 Android 应用程序中读取 CSV 文件

    我正在开发一个概念验证应用程序 以便我可以在我正在制作的更大的应用程序中实现该功能 我对 Java 和 Android 开发有点陌生 但希望这个问题不会太简单或太复杂 基本上 我试图从 CSV 文件中读取字符串列表 并使其可用于在应用程序的
  • RecyclerView OnClick 位置

    我正在尝试获取我的点击项目的位置RecyclerView 然而 这有点奇怪 只让我在点击时记录位置 而不让我做一个Toast的位置 看这里 public class MainAdapter extends RecyclerView Adap
  • Android:RunOnUiThread 与 AsyncTask

    我相信 Google 建议开发人员使用 AsyncTask 但是 我想知道它与使用 new Thread 然后调用 RunOnUiThread 在性能和内存效率方面有何不同 使用 RunOnUithread 的示例 some code 1
  • 使用当前日期时间的 RecyclerView 的动态节标题

    我将使用 RecyclerView 作为节标题 我想在 SQLite 数据库中插入每个日期和时间数据时创建节标题 我按照以下链接获取了此解决方案 但没有成功 请参考下图 对于上面的图像数据 使用以下代码或部分是静态的 List
  • 错误:升级到 lombok 1.16.2 后包 javax.annotation 不存在

    我的 android 项目使用 lombok 1 16 0 构建得很好 但是一旦我将依赖项更改为目标 1 16 2 我在使用 lombok 注释的任何地方都会收到以下错误 Error 20 1 error package javax ann
  • 如果使用推送服务关闭应用程序,应用程序会崩溃:parse.com

    我将清单中的接收器替换为我的
  • onActivityresult 数据为空

    这是我的相机应用程序 我想在其中捕获图像并裁剪它 但它拍照保存在我的 myimage 目录中 但不执行裁剪功能 请我需要帮助 我是这个领域的新人 这是我的相机开源代码 Intent intent new Intent MediaStore
  • Android Google Maps V2 当前位置纬度经度 NullPointerException

    有很多类似的问题 但我没有找到解决我的问题的方法 setUpMap方法是 private void setUpMap BitmapDescriptor iconm BitmapDescriptorFactory fromResource R

随机推荐

  • Ubuntu 16.04下Anaconda的安装及使用

    文章目录 一 Anaconda的下载及安装 1 下载Anaconda 2 安装Anaconda 3 配置清华镜像源 二 Anaconda的基本使用 1 管理conda版本 2 管理虚拟环境 3 安装第三方包 三 Anaconda的卸载及重装
  • 【MySQL数据库的学习】

    MySQL数据库 1 连接数据库 mysql u root p 123456 2 创建数据库 create database 数据库名称 以字母 数字 下划线组成的字符串 但不要以数字开头 3 查看数据库 show databases 4
  • 内网和外网的区别是什么?

    内网和外网的区别重要依据主要是判断它是不是与广阔的外界相连 内网和外网最大的区别 内网IP局域网 网线都是连接在同一个 交换机上面的 也就是说它们的IP地址是由交换机或者路由器进行分配的 而且每一个IP也是有所不同的 并且这些连接在同一个路
  • 解决“error C267 ‘Beep_Led_yellow‘ requires ANSI-style prototype”错误方法

    今天给大家分享一个大家可能经常见的错误提示 error C267 Beep Led yellow requires ANSI style prototype 错误原因 这个错误其实是因为是指你的函数没有形参 却在使用过程中使用了值 就是比如
  • MATLAB中subplot绘图相关技巧

    http xiaotingzi blog 163 com blog static 217769214201361981535727 The first thing I want to mention is that tightfig has
  • 登录和第三方授权

    登录和授权的区别 登录 身份认证权限 授权 身份认证权限 令牌 cookie Autorization Autorization授权的两种方式 Basic Authorization Basic xxxx 风险 Bearer HTTP he
  • souce insight symble window 关闭

    单个文件 打开关闭 symble window 可以右击唤出右键菜单栏 点击symbol window即可 打开操作相同 所有文件打开或者关闭 ALT Y 打开file type option 或者菜单栏点击options打开file ty
  • iframe 父子之间的传值

    1 父给子传值 经过一个点击事件 给子页面传值 显示不同的模型 父页面代码 事件 onclick row column event var iframe document getElementById iframe container va
  • 关于oracle sql developer

    刚刚上班遇到Oracle SQL Developer不是很明白 百度了一下做了整理 方便以后查阅 Oracle SQL Developer是Oracle公司出品的一个免费的集成开发环境 是一个免费非开源的用以开发数据库应用程序的图形化工具
  • 在小程序中使用ES6的新特性

    文章目录 在小程序中使用ES6的新特性 1 模板对象 2 默认参数 3 类 4 解构赋值 5 箭头函数 6 使用promise简化回调 总结 在小程序中使用ES6的新特性 ECMAScript 6 简称ES6 是于2015年6月正式发布的J
  • devDependencies和dependencies的区别

    本文是学习笔记 非原创 非原创 非原创 学习node js的时候 老师就说了要从package json这个文件开始看起 其实一开始也是懵懵懂懂的 不知道啥叫包管理 后来逐渐开始知道了 真的为自己的智商感到捉急 今天主要是记录devDepe
  • 聚焦小游戏技术生态,腾讯游戏云GAME-TECH落地厦门

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯游戏云 发表于云 社区专栏 2018迎来了小游戏元年 据 2018年小游戏行业白皮书 显示 2018年小游戏市场规模预计将达到300亿元 国内小游戏用户将超5亿人 未来或有
  • 187_零线和火线

    火线 英文简写L LIVE 一般为红色或黄色或绿色 零线 英文简写N NEUTRAL 一般为蓝色 零线火线 专指 民用电的供电线路 市电的交流供电电压为220伏特 V 不同的国家不一样 中国是220V 它包括一根零线 N 和一根火线 L 零
  • 钉钉企业内部H5微应用、免登流程与真机调试

    官方文档 https ding doc dingtalk com 项目作为企业内部应用 H5微应用接入 免登 官方免登流程文档 https ding doc dingtalk com doc dev ep7bpq 简单来说 前端通过钉钉提供
  • Spring Cloud Alibaba 项目搭建流程

    Spring Cloud Alibaba 项目搭建 1 项目结构搭建 springcloudalibaba xmn pom xml gateway server 1030 网关 user common 公共类 order server 10
  • ElasticSearch条件查询,高亮查询,聚合查询,以及映射关系

    1 在上一篇文章中我们已经做过了创建索引和简单的文档数据的增删改查 今天我们的核心是文档数据的查询 当然在后期我们也会用java数据来操作数据 上一期 我们的索引库是shopping 今天我们再来回忆一下 这就是查询索引库中 所有的信息 接
  • 使用electron 将网页打包成应用程序

    需求 将一个已经上线的后台管理系统 只兼容Chrome 打包成一个不需要谷歌浏览器就可以运行的软件 需要安装 npm install electron g npm install electron packager g WinRAR解压工具
  • 最高分数的学生姓名

    include
  • JDBC第三讲

    目录 三 Dao模式 1 Dao模式概念 2 Dao模式的组成 3 具体代码 3 1 BaseDao 3 2 Dao接口 3 3 Dao接口的实现 3 4 实体类 3 5 测试类 三 Dao模式 1 Dao模式概念 前面我们在使用JDBC时
  • Jetpack学习之MVVM实战

    MVVM架构与Jetpack MVVM即Model View ViewModel的缩写 它的出现是为了将图形界面与业务逻辑 数据模型进行解耦 MVVM也是Google推崇的一种Android项目架构模型 而Jetpack组件 大部分是为了能