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

95 阅读3分钟

这是我参与[第四届青训营]笔记创作的第 28 天

一.网络通信

网络库开源框架对比

HttpURL Connection,Volley,OkHttp,Retrofit

Retrofit介绍

是网络请求封装框架,是对OkHttp的一个封装。
1,Retrofit库的引入 2,创建 用于描述网络请求的接口3,使用Retrofit实例发起网络请求
Retrofit是在运行期间,配合java动态代理,获取方法和参数注解,并构建Request对象的。
java动态代理Proxy.newProxylnstance(新增一个方法代理)

Retrofit使用介绍

1,在需要用到Retrofit接口的module中,新增依赖
2,创建 用于描述网络请求的接口
3,发起网络请求3.1创建Retrofit实例 3.2 创建请求接口实例interface,并获取Call实例 3.3调用call.enqueue进行异步请求 原理:使用注解,来描述网络请求;通过JAVA动态代理ProxyProxyInstance,来进行注释的识别和网络请求的构建;底层使用OkHttp发起网络请求。

注解类型

网络请求方法:@GET,@PATH,@PUT,@DELETE,@POST,@HTTP,@OPTIONS
标记类:@Streaming
网络请求参数:@URL,@Body,@Header,@headers,@field,@Part

@Override:标注一个方法是重写了父类的实现
@Nullable:标注所描述对象有可能为空
@GET:修饰方法名
@Path:修饰参数
@Target:指定作用的对象
@Retention:指定注解的生命周期
@PrimaryKey:表示单个主键,可自动生成(主键为null&&autoGenerate为true)
@Columnlnfo:列名的注解

Method.getGenericretumType()获取返回类型
Method.getAnnotations()获取方法的注解
Method.getParameterAnnotations()获取参数注解

注解的生命周期

.java-(APT)-.class-- .dex--.apk--runtime
SOURCE:只有在源码中有效,编译时被抛弃,例如: @Override
CLASS:编译class文件时有效,一般会使用到注解处理器(APT)
RUNTIME:在运行期间,获取对应的注解,并做相关处理。

最好用Retrofit,cronet网络库(二次封装)TTNet是网络请求框架

TINET介绍

用法:于Proxy基本一致。原理:基于Proxy进行二次开发,替换底层的OkHttp,改为自研的 Cronet.

二.数据存储

持久性的本地数据存储

存储方式

SharedPreferences:存布尔,int,float,long,String类型,键值对存储。用于记录app的各种配置信息
文件存储:存各种格式的文件到手机中,默认情况下不能跨app共享。用于网络下载的zip包,txt文件的存储
ContentProvider:可跨APP进行数据共享;通过Uri对象进行访问。用于音频,视频,图片,通讯录的读写
SQLite存储数据:可存储结构化数据,对数据进行增删改查较为方便。用于保存feed流数据,并进行增删改查。

Room介绍

Room在SQLite上提供了一个抽象层,以便在充分利用SQLite的强大功能的同时,流畅地访问数据库——Client--Room--SupportSQLiteOpenHelper

三个组件

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

原理

1,编译期,通过kapt(注解处理器工具)处理@Dao,@Database注解,动态生成对应的实现类。AppDatabase--AppDatabase_lmpl,UserDao--UserDao_lmpl(类)在build/generated/source/kapt/
2,底层使用Android提供的SupportSQLiteHelper实现数据的增删改查等操作