这是我参与「第四届青训营」笔记创作活动的第5天
课程主要内容
- 网络通信
- 数据存储
网络通信
App内容的获取,都是通过网络请求
- 网络库开源框架对比
- Retrofit使用&原理介绍
- TTNet介绍,了解字节跳动网络请求框架
网络请求-简介
-
客户端向服务端发起请求,服务端返回数据给到客户端
-
由于网络请求在大型App里使用非常频繁,为了更好的支持业务迭代,一般会进行网络请求的封装
网络框架对比
Retrofit介绍
Retrofit是目前Android平台上,可以说是最热门的网络请求封装框架,是对OkHttp的一个封装。
Retrofit快速使用
- Retrofit 库的引入
在需要用到Retrofit接口的module中,新增依赖
- 创建用于描述网络请求的接口
定义说明:
- 接口类名:可自定义,尽量和这类请求的含义相关
- 函数名:可自定义,需要能识别出该接口的作用,该interface里可以增加多个不同的函数
- @GET注解:用于指定该接口的相对路径,并采用Get方法发起请求
- @Path注解:需要外部调用时,传入一个uid,该uid会替换@GET注解里相对路径的{uid}
- 返回值Call< ResponseBody>:这里用ResponseBody,我们可以直接拿到请求的String内容如果要自动转为Model类,例如User,这里直接替换为User就好。
-
使用Retrofit 实例发起网络请求
- 创建Retrofit实例
- 创建请求接口的实例,并获取到Call实例
- 调用call.enqueue进行异步请求
- 处理返回的数据
Retrofit主流程
- 通过Builder模式,创建RetrofitConfig,保存baseUrl等内容
- 创建动态代理对象
- 创建OkHttpCall
- 发起网络请求
字节跳动的网络库--TTNet
TTNet是字节跳动通用的网络请求封装框架,用来向服务端发起请求。
作为字节内部的基础库,提供了一整套Android客户端网络请求解决方案。
优点:
- 基于Retrofit改造,具备了Retrofit所具有的优点
- 支持多个Http网络库的动态切换(okhttp和cronet)
- 支持网络拦截配置:添加公共参数,动态切换协议及Host,动态选路等
- 支持流解析,json序列化
注解介绍
有定义和使用注解的地方,肯定还需有获取注解并处理注解内容的地方,不然这个注解也就没啥作用了。
注解的生命周期
- SOURCE:只有在源码中有效,编译时抛弃,例如前面的@Override
- CLASS:编译class文件时有效,一般会使用到注解处理器。
- RUNTIMF:在运行期间,获取对应的注解,并做相关的处理。
网络请求总结
数据存储
- Android数据存储方式对比,了解不同场景该使用的工具
- 数据库框架对比
- Room数据库使用介绍
- Room数据库原理介绍
存储方式对比
持久性的本地数据存储是Android中常见的能力,可以在应用被杀死的情况下,而保持数据不会被清除。我们可以根据不同场景的诉求,可以选用不同的存储方式,常见的数据存储主要有以下4种。
数据库-框架对比
ObjectBox包增量大,性能最好,使用成本最低,但功能相对来说少一些。
Room支持LiveData、协程
Room-简介
Room是 Google Jetpack 家族里的一员,Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库
主要的3个组件:
- 数据库类(
Database),用于保存数据库并作为应用持久性数据底层连接的主要访问点。 - 数据实体(
Entity),用于表示应用的数据库中的表。 - 数据访问对象(
DAO),提供您的应用可用于查询、更新、插入和删除数据库中的数据的方法。
Room-实践案例
Room接入
-
Gradle目录的build.gradle文件里添加……
-
数据表设计:数据表包含 uid 、first_name、 last_name 3个字段
-
新建Entity:定义一个User数据实体,User的每个实例都代表App数据库中的user表的一行
-
新增DAO:定义一个名为UserDao的DAO。用来对User表的增删改查
-
新建数据库类,进行数据库配置,并需满足以下几个条件:
- 新增一个RoomDatabase的abstract子类
- 子类需加注解@Database(entities = [xxx], version = n),entities包含数据实体,将会在这个数据库中创建对应的表,version是数据的版本号
- 对于与数据库关联的每个DAO类,数据库类必须定义一个无参的抽象方法,并返回DAO类实例
-
获取dao对象:可进行数据库的增删改查操作
Room原理介绍
核心
- 编译期,通过kapt处理@Dao、@Database注解,动态生成对应的实现类
- 底层使用Android提供的SupportSQLiteOpenHelper实现数据库的增删改查等操作
1. kapt注解处理
Room在编译期,通过kapt处理@Dao和@Database注解,生成DAO和Database的实现类
AppDatabase --> AppDatabase_Impl
UserDao-->UserDao_Impl
2. 实现类利用Android SQLite进行数据库操作
AppDatabase_Impl:数据库实例的具体实现,自动生成
数据库总结
后记
这节课程中主要学习了网络通信和数据存储的相关内容,了解了Retrofit原理和使用、TTNet的有关知识,也了解了数据库框架的一些知识,Room数据库原理与使用等内容。