数据存储 & 网络通信 | 青训营笔记

131 阅读5分钟

这是我参与「第四届青训营」笔记创作活动的第5天

课程主要内容

  • 网络通信
  • 数据存储

网络通信

App内容的获取,都是通过网络请求

  1. 网络库开源框架对比
  2. Retrofit使用&原理介绍
  3. TTNet介绍,了解字节跳动网络请求框架

网络请求-简介

  • 客户端向服务端发起请求,服务端返回数据给到客户端

  • 由于网络请求在大型App里使用非常频繁,为了更好的支持业务迭代,一般会进行网络请求的封装

网络框架对比

image.png

Retrofit介绍

Retrofit是目前Android平台上,可以说是最热门的网络请求封装框架,是对OkHttp的一个封装

Retrofit快速使用

  1. Retrofit 库的引入

在需要用到Retrofit接口的module中,新增依赖

  1. 创建用于描述网络请求的接口

定义说明:

  • 接口类名:可自定义,尽量和这类请求的含义相关
  • 函数名:可自定义,需要能识别出该接口的作用,该interface里可以增加多个不同的函数
  • @GET注解:用于指定该接口的相对路径,并采用Get方法发起请求
  • @Path注解:需要外部调用时,传入一个uid,该uid会替换@GET注解里相对路径的{uid}
  • 返回值Call< ResponseBody>:这里用ResponseBody,我们可以直接拿到请求的String内容如果要自动转为Model类,例如User,这里直接替换为User就好。
  1. 使用Retrofit 实例发起网络请求

    • 创建Retrofit实例
    • 创建请求接口的实例,并获取到Call实例
    • 调用call.enqueue进行异步请求
    • 处理返回的数据

Retrofit主流程

  1. 通过Builder模式,创建RetrofitConfig,保存baseUrl等内容
  2. 创建动态代理对象
  3. 创建OkHttpCall
  4. 发起网络请求

字节跳动的网络库--TTNet

TTNet是字节跳动通用的网络请求封装框架,用来向服务端发起请求。

作为字节内部的基础库,提供了一整套Android客户端网络请求解决方案。

优点:

  • 基于Retrofit改造,具备了Retrofit所具有的优点
  • 支持多个Http网络库的动态切换(okhttp和cronet)
  • 支持网络拦截配置:添加公共参数,动态切换协议及Host,动态选路等
  • 支持流解析,json序列化

注解介绍

有定义和使用注解的地方,肯定还需有获取注解并处理注解内容的地方,不然这个注解也就没啥作用了。

注解的生命周期

  1. SOURCE:只有在源码中有效,编译时抛弃,例如前面的@Override
  2. CLASS:编译class文件时有效,一般会使用到注解处理器。
  3. RUNTIMF:在运行期间,获取对应的注解,并做相关的处理。

网络请求总结

image.png

数据存储

  1. Android数据存储方式对比,了解不同场景该使用的工具
  2. 数据库框架对比
  3. Room数据库使用介绍
  4. Room数据库原理介绍

存储方式对比

持久性的本地数据存储是Android中常见的能力,可以在应用被杀死的情况下,而保持数据不会被清除。我们可以根据不同场景的诉求,可以选用不同的存储方式,常见的数据存储主要有以下4种。

image.png

数据库-框架对比

image.png

ObjectBox包增量大,性能最好,使用成本最低,但功能相对来说少一些。

Room支持LiveData、协程

Room-简介

Room是 Google Jetpack 家族里的一员,Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库

主要的3个组件:

  • 数据库类(Database),用于保存数据库并作为应用持久性数据底层连接的主要访问点。
  • 数据实体(Entity),用于表示应用的数据库中的表。
  • 数据访问对象(DAO),提供您的应用可用于查询、更新、插入和删除数据库中的数据的方法。

Room-实践案例

Room接入

  1. Gradle目录的build.gradle文件里添加……

  2. 数据表设计:数据表包含 uid 、first_name、 last_name 3个字段

  3. 新建Entity:定义一个User数据实体,User的每个实例都代表App数据库中的user表的一行

  4. 新增DAO:定义一个名为UserDao的DAO。用来对User表的增删改查

  5. 新建数据库类,进行数据库配置,并需满足以下几个条件:

    • 新增一个RoomDatabase的abstract子类
    • 子类需加注解@Database(entities = [xxx], version = n),entities包含数据实体,将会在这个数据库中创建对应的表,version是数据的版本号
    • 对于与数据库关联的每个DAO类,数据库类必须定义一个无参的抽象方法,并返回DAO类实例
  6. 获取dao对象:可进行数据库的增删改查操作

Room原理介绍

核心

  1. 编译期,通过kapt处理@Dao、@Database注解,动态生成对应的实现类
  2. 底层使用Android提供的SupportSQLiteOpenHelper实现数据库的增删改查等操作

 1. kapt注解处理

Room在编译期,通过kapt处理@Dao和@Database注解,生成DAO和Database的实现类 

AppDatabase --> AppDatabase_Impl 

UserDao-->UserDao_Impl

2. 实现类利用Android SQLite进行数据库操作

AppDatabase_Impl:数据库实例的具体实现,自动生成

数据库总结

image.png

后记

这节课程中主要学习了网络通信和数据存储的相关内容,了解了Retrofit原理和使用、TTNet的有关知识,也了解了数据库框架的一些知识,Room数据库原理与使用等内容。