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

137 阅读5分钟

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


数据存储&网络通信

本堂课内容

背景:

有大量的信息流内容,需要满足

  1. 信息流的数据,要能无线刷新
  2. 每次冷启,要能快速的展示信息流的内容
  1. 网络请求
  2. 数据存储

知识点介绍

网络通信

请求方式包体积增量使用成本特点使用场景
HttpURL0KB2n需要自己做封装,如线程池管理,返回的数据解析只有少量网络请求的工具类APP
Volley57KBn适合网络请求频发,数据传输量小
不适合用来上传和下载文件
已经停止更新
无需下载大文件的APP
OkHttp262KB1.5n可以设置拦截器,支持大文件的上传和下载;
基于NIO和Okio性能更好;
一般需要二次封装使用
一般使用较少
Retrofit343KB2n具备Okhttp所有的优点,且更加出色
restful api 设计风格
通过注解配置请求,包括请求方法、请求参数、请求头
支持Gson、jackson

Retrofit

是目前Android平台上最热门的网络请求封装框架,是对OKHttp的一个封装框架

  1. Retrofit包引入,在module中引入即可

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

    定义说明:

    • 接口类名:可自定义,尽量与这类请求的含义相关
    • 函数名:可自定义,需要能识别出该接口的作用
    • @GET注解,用于制定该接口的相对路径,并采用Get方法发起请求
    • @Path注解,需要外部调用时,传入一个uid,该uid会替换@GET注解里相对路径的uid
    • 返回值:自动转为所需要的类
  3. 发起网络请求

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

主要流程

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

TTnet

优点

  1. 基于Retrofit改造,具备了其所有优点
  2. 支持多个Http网络库的动态切换
  3. 支持网络拦截配置:添加公共参数,动态切换协议以及Host,动态选路
  4. 支持流解析,json序列化

注解

生命周期

  1. SOURCE:只有在源码阶段有效,编译阶段抛弃
  2. CLASS:编译class文件时有效,一般会使用到注解处理器
  3. RUNTIME:在运行期间,获取对应的注解,并做相关的处理

数据存储

存储方式特点使用场景
SharePreferences只能存boolean、int、float、long、String简单类型
键值对存储
记录app 的各种配置信息
文件存储可以存各种格式的文件到手机中
默认情况下文件不能跨APP存储
网络下载的zip
TXT文件的存储
ContentProvider可以跨APP进行数据共享
通过Url对象进行访问
音视频,图片等读写
SQLite可存储结构化数据
对数据进行增删改查较为方便
保存feed流数据,并进行增删改查

数据库

相对来说,数据库的使用会比较复杂,ObjectBox包增量大,使用成本低,且功能较少。

Room包增量小,功能多,Google背书。

Room

是Jetpack之中的一部分,在SQLite上提供了抽象层,可以充分的利用SQLite,流畅的访问数据库

主要的三个组件

  1. 数据库类,用于保存数据库并且作为应用持久性数据底层连接的主要访问点
  2. 数据实体,用于表示应用的数据库中的表
  3. 数据访问对象,提供应用可以用于查询、更新、插入和删除数据库中的数据和方法

Room接入

  1. 在Gradle文件里导入
  2. 数据表设计
  3. 新建Entity:定义一个User数据实体,User的每个实例都代表APP数据库中的user表中的一行
  4. 新增DAO:定义一个名为UserDao的DAO用来对User表的增删改查
  5. 新建数据库类
    1. 新增一个RoomDatabase的abstract子类
    2. 子类需加注解@Database(entities=[], version=n), entities包含数据实体,将会在这个数据库中创建对应的表,version是数据的版本号
    3. 对于与数据库关联的每个DAO类,数据库类必须定义一个无参的抽象方法,并返回DAO类实例
  6. 获取dao对象,即可进行数据库的增删改查操作

核心

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

课后个人总结

今天学习了和网络通信与数据存储的有关知识,通过学习我了解到了目前主流的网络框架以及它们各自的优缺点,主要了解了Retrofit的用法和简单的原理,包括字节所在此基础上开发的TTNet的相关内容。并且学习了数据存储的相关内容,包括常见的数据存储方式,以及最受欢迎的Room数据库框架的使用以及简单原理。