安卓开发中的网络通讯和数据存储

114 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第2天 本文主要介绍安卓开发中常用的网络通讯、数据存储的知识

网络通信

网络库开源框架

主要的网络框架包括:

  • HttpURLConnection:谷歌自带,需要自己封装,管理线程
  • Volley:用于网络请求频繁、数据量小的场景,停止更新(legacy)
  • OkHttp:支持大文将上传下载,支持拦截器,一般需要二次封装后进行使用
  • Retrofit:二次封装OkHttp,通过注解配置请求,搭配多种转换器

Retrofit使用:

  1. 导入库(增加依赖)

  2. 创建描述请求的接口

    @GET() 传入相对路径,使用get请求

    @PATH() 将传入的参数替换到get{}中

  3. 获取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(注解处理)

  1. 新建entity(@Entity)

    使用注解修饰成员:@PrimaryKey、@ColumnInfo(注意成员应该为public,或者有getter/setter)

  2. 新建Dao(@Dao)

    用@Query、@Delete、@Insert修饰方法

  3. 继承RoomDatabase

    @Database(entities=[xxx:class],version=n)

    定义方法,返回Dao对象

  4. 实例化databas,获取dao,进行操作实际数据库

原理:

  • kapt根据注解,将dao、databa抽象类继承(_impl)并实例化