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

App 组件化模块化之路——Android 框架组件(Android Architecture Components)使用指南

App 框架组件 框架提供了以下几个核心组件,我们将通过一个实例来说明这几个组件使用。 ViewModel LiveData Room 假设要实现一个用户信息展示页面。...这样 ViewModel 也不用知道数据源到底是来自哪里。 组件间依赖管理 从上文我们知道 UserRepository 类需要有一个 WebService 实例才能工作。...前面我们实现 Repository 是只有一个网络数据。...这样做每次进入用户信息页面都需要去查询网络,用户需要等待,体验不好。因此在 Repository 中加一个缓存数据。...(Room 组件) Android 框架提供了 Room 组件,为 App 数据持久化提供了解决方案。

1.6K20

Android Jetpack - Room

Room 简介 Room 持久化库提供了一个基于 SQLite 抽象层,以便在利用 SQLite 全部功能同时实现更强大数据库访问 Room 库帮你 App 在设备上创建一个缓存,并作为此 App...然后,应用程序使用每个 DAO 从数据获取实体,并将对这些实体任何更改保存回数据库。最后,应用程序使用实体来获取和设置与数据表列对应Room 组件关系图 ?...Repository 类为数据访问应用程序其余部分提供了一个干净 API ? img 为什么使用 Repository ? Repository 管理查询并允许您使用多个后端。...在最常见示例,Repository 实现了用于决定是从网络获取数据还是使用在本地数据缓存结果逻辑,既避免了 ViewModel数据直接交互又统一了单一真实数据逻辑 Repository...,并被 @PrimaryKey 注释作为主键,此处 @ColumnInfo 作用是给此参数取一个别名 c_word ,该别名会被真实记录于数据字段,如果在同一张表存在多个可能重复字段时例如

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

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

( 导入依赖 | 定义 Entity 实体类 | 定义 Dao 数据库访问对象接口 | 定义数据库实例类 ) , 实现了 使用 Room 框架访问 Android SQLite 数据操作...与 数据模型 Model 之间 数据交互 桥梁 ; LiveData 是基于 ViewModel , 是 对 ViewModel 数据维护一个补充 ; 在 ViewModel 中使用了 LiveData...结合使用 , Room 单独使用 , 唯一区别是 Room 框架 Dao 数据访问接口对象 查询方法 , 其返回值类型改为 LiveData 类型 , LiveData 泛型为 原来查询方法返回值类型..., 如果主动调用该方法查询数据库 , 会返回一个数据 LiveData ; 如果想要手动主动查询数据库 , 需要保留非 LiveData 返回值查询方法 , 也就是如下面的代码所示 , 同时维护两组查询方法接口...Entity 实体 / 同时定义数据库表 和 对鹰实体类 * 设置该数据类对应数据一张数据表, 表名为 student * 该数据库表数据对应一个 Student 类实例对象 */

61720

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

官方文档 Demo代码地址 Navigation “导航 Navigation 组件旨在用于具有一个主 Activity 和多个 Fragment 目的地应用。...主 Activity 与导航图相关联,且包含一个负责根据需要交换目的地 NavHostFragment。在具有多个 Activity 目的地应用,每个 Activity 均拥有其自己导航图。...” 所以Room就是一个数据库框架。问题来了,市面上那么多数据库组件,比如ormLite,greendao等等,为什么google还要出一个room,有什么优势呢?...GreenDao在构造sql语句时候是通过代码拼接,所以较慢。Room是通过接口方法注解生成sql语句,也就是编译成字节码时候就生成了sql语句,所以运行起来较快。...当然实际使用起来也确实要方便很多,比如liveData结合,就能在数据查询后进行自动UI更新。 既然Room这么优秀,那就用起来吧。Room接入主要有三大点:DataBase、Entity、Dao。

2.9K20

Android 架构组件 - 让天下没有难做 App

Room 是 SQLite 之上应用抽象层,而 SQLite 是一个位于 Android Framework 层内存型数据库。...SQL 语句可以直接引用方法参数,而且它返回值可以是 LiveData 类型,也支持 Flowable 类型,也就是说,Room 原生支持响应式,这是对数据驱动最有利支持,也是 Room 区别于其他...除了数据适配之外,ViewModel 还有一个强大用法 —— Fragment 之间共享数据,这样 ViewModel 又扮演了 FLUX 模式 store 这一角色,是多个页面(fragment...如果把 ViewModel 作为 SSOC(唯一真相源),多个 Fragment 之间共享数据,再利用 SingleLiveEvent 做总线,一个 Activity 配多个 Fragment 写法就避免了...PositionalDataSource - 单页数据以位置为标识,这种模式比较常见,Room 只支持这一种,因为数据查询以 OFFSET 和 LIMIT 做分页。

1.2K20

Hilt-依赖注入框架上手指南

: 'dagger.hilt.android.plugin' 举个: 我们有一个 NetDataSource 远程数据类,然后我们可能需要在Activity调用,代码如下 class NetDataSource...@Provides 常用于模块 举个: room常规用法 我们使用room,有一个数据库表和相应Dao @Entity(tableName = "book") class Book(val name...由于AppDatabase是由Room生成,因此是项目不拥有的另一个类,因此我们直接复制原方法即可,这里 @Singleton 标志这个其方法只会被调用一次,类似于一个单例。...举个: 我们有一个 IBook 接口,用来存储及查询书本数据 interface IBook { suspend fun saveBook(name: String) suspend...只有一个具体实现类,但是往往实际开发,我们是存在多个具体实现。

1.6K10

livedatabus详解,阿里是如何用他来做淘宝架构

Room 是 SQLite 之上应用抽象层,而 SQLite 是一个位于 Android Framework 层内存型数据库。...虽然 Realm 也是一个优秀数据库,但是它并没有内置于 Android 系统,所会增大 apk 体积,使用 Room 则没有这方面烦恼。...SQL 语句可以直接引用方法参数,而且它返回值可以是LiveData类型,也支持Flowable类型,也就是说,Room 原生支持响应式,这是对数据驱动最有利支持,也是 Room 区别于其他 ORM...除了数据适配之外,ViewModel 还有一个强大用法 —— Fragment 之间共享数据,这样 ViewModel 又扮演了 FLUX 模式 store 这一角色,是多个页面(fragment...PositionalDataSource - 单页数据以位置为标识,这种模式比较常见,Room 只支持这一种,因为数据查询以 OFFSET 和 LIMIT 做分页。

1.1K30

360度无死角,Android Jetpack面试技巧大揭秘

使用场景包括但不限于: 单一活动多Fragment架构: 通过将所有Fragment集中在一个活动,简化了导航管理和传递数据复杂性。...参考简答: ViewModel作用在于解决Android应用活动和碎片(Fragment)生命周期问题。它允许数据在屏幕旋转等配置更改时存活,并确保数据在不同组件之间共享而不丢失。...Room数据性能优化 问题: 在使用Room数据库时,有哪些性能优化手段可以提高数据库访问效率? 出发点: 了解在实际项目中,如何通过一些技巧提高Room数据性能。...参考简答:Room数据性能优化手段包括: 合理使用索引: 根据查询需求创建合适索引,提高查询效率。...批量操作: 使用@Transaction注解将多个操作放在同一个事务,减少数据库事务开销。 异步查询: 在后台线程执行查询操作,避免在主线程执行耗时数据库操作,防止ANR。

15810

Android 让你 Room 搭上 RxJava 顺风车 从重复代码解脱出来

搭建 Room 作为一个 Android 数据库操作注解集合,最基本操作就是对我们数据库进行。...Google 官方对它解释是:在一个被标注了 @Dao 标签,用于查询方法。...顾名思义被该注解标注方法,会被 Room 注解处理器识别,当作一个数据查询方法,至于具体查询逻辑并不需要我们关心,我们只需要将 SQL 语句 作为参数,传入 @Query(...) 即可。...我们看到,我们向其中传入了多个参数,包括:entities 以数组结构,标记一系列数据表,这个例子我们只有一个 User 表,所以只传入一个; version 数据库版本;exportSchema...:“使用 Room 数据库作为一个数据源。”

1.1K20

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

, 数据结构 , 发生了变化 , 需要进行更新 , 可以使用 Migration 迁移工具 升级数据库 ; 迁移 是指 将 数据结构 从一个版本 更改为 另一个版本 , 以适应新数据模型 ; Room...(1, 2) 即可 ; 从 数据库版本 1 升级为 数据库版本 3 , 先执行 Migration(1, 2) , 再执行 Migration(2, 3) ; Room 提供了简便方式来 处理 Android...二、Room#Migration 迁移工具使用要点 本章节以新增一个数据库表字段为例 , 在 【Jetpack】Room + ViewModel + LiveData 综合使用 ( 核心要点说明 |...', age=60)] 此时 , 手机已经运行了 数据库版本 1 程序 , 手机该应用存储区域已经有一个数据库了 ; 修改 Entity 实体类 , 即更改数据模型 , 创建 Migration...Entity 实体 / 同时定义数据库表 和 对鹰实体类 * 设置该数据类对应数据一张数据表, 表名为 student * 该数据库表数据对应一个 Student 类实例对象 */

80630

MVVM数据持久化(一)——ROOM集成

MVVM数据持久化 之前我们分别介绍了MVVM框架悲剧,项目搭建以及网络请求,接下来在这篇文章当中,我们来聊一聊MVVM数据持久化问题,也就是我们常说缓存 Room Room持久库提供了一个SQLite...能力同时允许流畅数据库访问,最主要是它让SQLiteDatabase使用变得简单,大大减少了重复代码,并且把SQL查询检查放在了编译时。...用@Database注解类应满足以下条件: 是一个继承RoomDatabase抽象类。 在注释包含与数据库相关联实体列表。 包含一个具有0个参数抽象方法,并返回用@Dao注释类。...要为一个entity添加索引,在@Entity注解添加indices属性,列出你想放在索引或者组合索引字段。 有时候,某个字段或者几个字段必须是唯一。...Dao负责操作数据方法,也就是说我们一些操作数据动作都是在这里完成。不同是我们不需要这些都用Dao类当中注解来定义查询

1.5K20

正式发布 Android 架构组件 1.0 稳定版

我们最近转用了架构组件 ViewModel 实现,并完全摆脱了重复工作,我们发现可以将更多时间用于设计、业务逻辑和测试,而不是浪费在样板代码或担心 Android 生命周期问题上。...同时我们也开始借助 LiveData —— 一个可以感知 Activity 生命周期数据容器 —— 用于获取和显示网络数据,而不用再担心网络调用订阅管理。...了解更多 LiveData 相关内容: developer.android.google.cn/topic/libra… ViewModel ViewModel 将视图数据和逻辑从具有生命周期特性实体...了解更多 ViewModel 相关内容: developer.android.google.cn/topic/libra… Room ? 几乎所有 App 都需要在本地储存数据。...它和 SQLite 有一样强大功能,但是节省了很多重复编码麻烦事儿。它一些功能,如编译时数据查询验证、内置迁移支持等,让开发者能够更简单地构建健壮持久层。

48420

Android Jetpack架构组件(一)与AndroidX

),它包括了LifeCycle、LiveData、ViewModelRoom等组件,而在Goole I/O 2018大会上谷歌使用AndroidX替代了Android Support Library,...Data Binding(数据绑定):属于支持库可使用声明式将布局界面组件绑定到应用数据源 Lifecycles:管理 Activity 和 Fragment 生命周期 LiveData:是一个可观察数据持有者类...ViewModel:以生命周期感知方式存储和管理与UI相关数据。 WorkManager:管理Android后台作业,即使应用程序退出或设备重新启动也可以运行可延迟异步任务。...存储区是唯一依赖于其他多个类,在本例存储区依赖于持久性数据模型和远程后端数据源。并且,这些架构组件既可以配合使用,也可以单独使用,可以根据需要合理选择。...不仅如此,AAC(Android Architecture Components架构缩写)组件也被 合并到AndroidX,所以在使用JetPack组件时经常会看到AndroidX相关包。

1.9K00

Android 开发中使用协程 | 代码实战

Android 应用您可以用这种方式解决很多问题,比如对数据查询、存储或更新,它还很适用于处理列表排序问题。...因为这个仓库存储商品很多,所以对它们进行排序要花费将近 1 秒钟,因此我们需要使用协程来避免阻塞主线程。 在应用,所有的数据都会存储到 Room 数据。...最简单方法就是来一个事件就启动一个协程,最适合处理这种情况地方就是 ViewModel 了。 在 ViewModel 启动协程是很通用模式。...一次性请求模式 这是在 Android 架构组件中使用协程进行一次性请求完整模式,我们将协程添加到了 ViewModel、Repository 和 Room ,每一层都有着不同责任分工。...我们实现了如何在 ViewModel 启动协程,然后在 Repository 和 Room Dao 中提供公开 suspend function,这样形成了一个完整编程范式。

1.1K10

Android Architecture Components Part1:Room

AAC主要由4个单一组件组成,分别为:Room、LiveData、Lifecycle与ViewModel。它们每一个都是独立存在组件,我们可以单独使用其中几个,又或者可以将它们全部整合到一起。...所以对于AAC它提供了更好使用灵活性,方便我们集成到我们App。 今天主要是对AAC其中Room组件进行分析。Room一个稳健SQL对象映射库,用来帮助我们快速实现数据本地存储。...在Android App中进行本地数据存储都是使用SQLite,当我们使用原生SQLite进行本地数据编写时,我们不仅要定义数据库结构,还要创建SQLiteHelper,编写一连串SQL语句。...例如getAllContacts()方法,我们为了让它实现获取contacts表所有数据,我们需要在其方法添加@Query注释,由于是查询方法,自然是使用Query,如果是插入方法就是Insert...其次()内容就是正常查询语句。

78420

JetPack--Room数据

需要满足:定义类是一个继承RoomDatabase抽象类,注解定义包含实体类列表,包含一个没有参数抽象方法并返回Dao对象 一、Room上手 首先添加依赖: implementation...' 定义一个实体类,在class上使用 @Entity注解 ,还需要一个构造方法,Room会根据这个构造将表里数据转化为实体类,对于其他我们代码里使用构造方法,可以使用@Ignore注解表示Room...效果: 不过每次我们做了操作后,还需要手动查询下,有没有可以自动刷新数据方法呢?...二、ViewModel+LiveData+Room Room支持返回LiveData类型,结合ViewModel、DataBinding,就可以改造成一个非常棒MVVM架构 package com.aruba.room...层,里面实现对数据操作 package com.aruba.room; import android.content.Context; import android.os.AsyncTask; import

1.5K20

使用 Paging 3 实现分页加载

下图为您应用各个层级推荐直接接入 Paging Android 应用架构: ? Paging 组件及其在应用架构集成 定义数据数据定义取决于您从哪里加载数据。...即可,如果您使用了 Room,从 2.3.0-alpha 开始,它将默认为您实现 Paging Source,请参见: Android 开发文档|使用 Room DAO 访问数据; 如果您从一个 多层级数据源...您要在 ViewModel 构造 Pager 对象并向 UI 暴露一个 Flow。...下面是一个在 Activity onCreate() 函数实现该操作示例: val viewModel by viewModels() val pagingAdapter = DogAdapter...如果您正在使用 Room,那么您只需要向您 DAO 添加一个返回 PagingSource 查询: @Query("SELECT * FROM doggos") fun getDoggos(): PagingSource

1.7K31

Android Jetpack - LiveData

: 1、创建持有任意类型 LiveData 实例,这一步通常在 ViewModel 完成 2、创建一个 Observer 对象并重写其 onChanged() 方法,该方法会在 LiveData 数据更改时被回调并返回最新数据...你可以通过 removeObserver(Observer) 方法删除观察者 1、创建一个 LiveData LiveData 是一个包装器,可以包装任何数据,包括实现集合对象,例如 List。...与 Room 一起使用 LiveData Room 持久化库支持可观察查询并返回 LiveData 对象,这些查询一般在 DAO 编写 在更新数据库时,Room 会生成更新 LiveData 对象所需所有代码...,此模式对于使 UI 显示数据与存储在数据数据保持同步非常有用。...具体可以参考 Android Jetpack - Room 一文所提供代码示例 转换 LiveData 您可能希望在将 LiveData 对象分派给观察者之前更改存储在 LiveData 对象值,

2K30
领券