这是我参与「第四届青训营 」笔记创作活动的第2天 本文主要介绍安卓开发中常用的网络通讯、数据存储的知识
网络通信
网络库开源框架
主要的网络框架包括:
- HttpURLConnection:谷歌自带,需要自己封装,管理线程
- Volley:用于网络请求频繁、数据量小的场景,停止更新(legacy)
- OkHttp:支持大文将上传下载,支持拦截器,一般需要二次封装后进行使用
- Retrofit:二次封装OkHttp,通过注解配置请求,搭配多种转换器
Retrofit使用:
-
导入库(增加依赖)
-
创建描述请求的接口
@GET() 传入相对路径,使用get请求
@PATH() 将传入的参数替换到get{}中
-
获取Retrofit实例,利用实例获取接口,进行异步请求
Java语言补充
-
注解:可以作用在类、方法、参数、成员变量上的标签,并且可以对其中的内容进行读取、处理
-
- 注解的生命周期:source,class,runtime(注解可以被保留到何时)
-
- 注解的定义:使用@Target指定作用对象,使用@Retention指定生命周期
-
-
反射获取对象后,可以获取其注解,进而获取注解里的值
-
-
动态代理Proxy
- 利用反射技术,实现将对接口中的方法的调用,代理为InvocationHandler中的invoke方法
- 而invoke中可以获取方法的注解
Retrofit流程
retrofit底层封装了OkHttp框架,在build阶段实际上调用了OkHttpClient的构造方法,在create阶段创建代理,返回一个服务,以后调用该服务内的方法,都会经过适配器(Adapator),转换为对OkHttp对象内方法的调用
基于以上原理,TTNet保持了retrofit的接口,在底层上将OkHttp替换为TTNet
数据存储
-
持久化的数据存储方式:
- SharedPreference:通过键值对存储基本数据类型,用于记录配置信息
- 文件存储:默认不允许跨应用共享数据
- ContentProvider:可以跨应用共享数据,通过Uri进行访问
- 数据库存储:结构化存储,增删改查
-
数据库:常见Room(封装sqlite)、GreenDao、ObjectBox
Room
组件:database、entity、DAO(Data Access Object)
依赖:room-runtime、room-complier:kapt(注解处理)
-
新建entity(@Entity)
使用注解修饰成员:@PrimaryKey、@ColumnInfo(注意成员应该为public,或者有getter/setter)
-
新建Dao(@Dao)
用@Query、@Delete、@Insert修饰方法
-
继承RoomDatabase
@Database(entities=[xxx:class],version=n)
定义方法,返回Dao对象
-
实例化databas,获取dao,进行操作实际数据库
原理:
- kapt根据注解,将dao、databa抽象类继承(_impl)并实例化