Android客户端青训营课程(第四课)笔记|青训营笔记

91 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第5天
该笔记主要是对青训营第四课知识点的简单总结和自己的小思考。

网络通信

网络请求框架对比
image.png
【Retrofit是目前Android平台上,可以说是最热门的网络请求封装框架,是对OkHttp的一个封装
Retrofit快速使用 1Retrofit库的引用(在需要用到Retrofit接口的module中,新增依赖)
2创建用于描述网络请求的接口(需接口类名、函数名、@GET注解、@Path注解、返回值Call<ResponseBody>)
3使用Retrofit实例发起网络请求

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

【注解可以理解为是一个标签,标签可以加在类、方法、参数、成员变量上,并且可在合适的时机读取注解的内容,并进行处理】
【Retrofit还有非常丰富的注解,通过组合它们,可以实现很多功能,还是类似地,记好常用的,其余的待有需求时再查阅文档】
常用的
@override:标注一个方法重写了父类的实现
@Nullalbe:标注所描述对象有可能为空
注解的处理,一般有3个时机(注解的生命周期@Retention)
SOURCE:只有在源码中有效,编译时抛弃,例如前面的@Override
CLASS:编译class文件时有效,一般会使用到注解处理器
RUNTIME:在运行期间,获取对应的注解,并相关的处理
@Target:指定作用的对象,@Retention:指定注解的生命周期
注解的获取和使用
通过反射获取到Method对象后,有以下接口来获取注解内容
1Method.getGenericReturnType()获取返回类型
2Method.getAnnotations()获取方法的注解
3Method.getParameterAnnotations()获取参数注解
Retorfit是在运行期间,配合Java动态代理,获取方法和参数的注解,并构造Request对象的

Retrofit主流程
image.png (重点关注绿色部分:OkHttpCall的创建和调用)
主流程如下:
1通过Build模式,创建RetrofitConfig,保存baseUrl等内容
2创建动态代理对象
3创建OkHttpCall
4发起网络请求

网络库选用?
1研发:用法稳定,不经常变化,推荐Retrofit
2产品:保护用户隐私,app的网络请求需去掉敏感参数
3技术TL:做好网络各环节的性能监控,不断优化(深度定制)

cronet做了许多优化(在请求成功率和网络延时等方面),比OkHttp(底层Java)更适合业务需求
但Cronet是C++实现的,不方便直接使用,需要进行二次封装

TTNet

  • 基于Retrofit改造,具备Retrofit所有优点
  • 支持多个Http网络库的动态切换(okHttp和cronet)
  • 支持网络拦截配置:添加公共参数,动态切换协议及Host,动态选路等
  • 支持流解析,json序列化
    基本用法与Retrofit基本一
    核心主要是替换其中的2点
    1.替换底层用到的OKHttpClient 2.替换底层用到的OkHttpCall
    总结
    image.png

数据存储

存储方式对比
持久性的本地数据存储时Android中常见的能力,可以在应用被杀死的情况下,而保持数据不会被清除。可以根据不同的场景的诉求,可以选用不同的存储方式,常见的数据存储主要有以下4种 image.png
数据库-框架对比
相对来说,数据库的使用会比较复杂些,我们单独进行探索,下面是几个主流的数据库框架对比 image.png

Room

Room是Google Jetpack家族里的一员,Room在SQLite上提供了一个抽象层,以便在充分利用SQLite的强大功能的同时,能够流畅地访问数据库
主要的3个组件
数据库类(Database),用于保存数据库并作为应用持久性数据底层链接的主要访问点
数据实体(Entity),用于表示应用的数据库中的表
数据访问对象(DAO),提供您的应用可用于查询,更新、插入和删除数据库中的数据的方法

image.png