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

108 阅读4分钟

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

课程概述

网络通信

  • 网络库框架对比
  • Retrofit使用&原理介绍
  • TTNet介绍,了解字节跳动网络请求框架

数据存储

  • Android数据存储方式对比,了解不同场景该使用的工具
  • 数据库框架对比
  • Room数据库使用与原理介绍

课程笔记

01.网络通信

大型app容的获取都是通过网络请求,同时也是app的基本能力

1.网络库开源框架对比

image.png

2.Retrofit介绍

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

Retrofit使用介绍

  • 1.在需要使用Retrofit接口的module中,新增依赖
dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    //...其他依赖
}
  • 2.创建用于描述网络请求的接口
//接口类名:可自定义,尽量和这类请求的含义相关
interface IUserInfoService {

    @GET("users/{uid}/name")
    fun getUserName(@Path("uid") uid: Int): Call<ResponseBody>

    //@GET("users/{name}/uid")
    //fun getRequest(@Path("name" name:String)) Call<User>
    
    //后续可以增加其他的接口,一个接口对应一个api请求
}

//函数名:可自定义,需要能识别出该接口的作用,该interface里可以增加多个不同的函数

//@GET 注解:用于指定该接口的相对路径,并采用Get方法发起请求

//@Path 注解:需要外部调用时,传入一个uid,该uid会替换@GET注解里相对路径的{uid}

//返回值Call,这里用ResponseBody,我们可以直接拿到请求的String内容

//如果要自动转为Model类,例如User,这里直接替换为User就好。

  • 3.发起网络请求
fun getUserName(view: View) {
    //创建Retrofit实例
    val retrofit = Retrofit.Builder()
        .baseUrl("https://www.bytedance.com/")
        .build()
    //创建iUserInfoService实例
    val iUserInfoService = retrofit.create(IUserInfoService::class.java)
    //创建网络请求Call对象
    val call = iUserInfoService.getUserName(1123)
    //发起异步请求
    call.enqueue(object : Callback<ResponseBody> {

        override fun onResponse(call: Call<ResponseBody>,
                                response: Response<ResponseBody>) {
            //请求成功时回调
            request_result_tv.text = "请求成功:" + response.body()!!.string()
        }

        override fun onFailure(call: Call<ResponseBody>, e: Throwable) {
            //请求失败时候的回调
            request_result_tv.text = "请求失败:" + e.message
        }
    })
}

上述代码来自:【Android 客户端专场 学习资料二】第四届字节跳动青训营 - 掘金 (juejin.cn)

3.TTNET介绍

字节跳动的网络库--TTNET

TTNET是字节内部大部分APP都在用的网络库

优点:

  • 基于Retrofit改造,具备了Retrofit所具有的优点
  • 支持多个Http网络库的动态切换(okhttp和cronet
  • 支持网络拦截配置:添加公共参数,动态切换协议及Host,动态选路等
  • 支持流解析,json序列化

4.网络请求总结

image.png

02.数据存储

1.数据存储方式对比

持久性的本地数据存储是Android中常见的能力,可以在应用被杀死的情况下,而保持数据不会被清除。我们可以根据不同场景的诉求,可以选用不同的存储方式,常见的数据存储主要有以下4种。

image.png

2.数据库框架对比

image.png

3.Room数据库使用介绍

  • 数据库类(Database),用于保存数据库并作为应用持久性数据底层连接的主要访问点。

  • 数据实体(Entity),用于表示应用的数据库中的表。

  • 数据访问对象(DAO),提供您的应用可用于查询、更新、插入和删除数据库中的数据的方法。

4.Room数据库原理介绍

核心:

  • 编译期,通过kapt处理@``Dao@Database注解,动态生成对应的实现类

  • 底层使用Android提供的SupportSQLiteOpenHelper实现数据库的增删改查等操作

5.数据库总结

image.png 上述部分图片来自资料:【Android 客户端专场 学习资料二】第四届字节跳动青训营 - 掘金 (juejin.cn)

课后总结

网络请求:

  • HttpURLConnection:系统自带,适合小型App , 无太多网络请求时, 可以简单装使用

  • Volley:适合频繁且返回数据体小的App , 不适合用于文件的下载, 已停更

  • OkHttp:性能更好, 支持大文件的下载, 需要封装使用

  • Retrofit:

  1. 基于OkHttp的封装
  2. 请求和返回封装的更好
  3. 使用有一定的门槛

数据存储

四大常见方式

  • SharePreferences
  • 文件存储
  • ContentProvider
  • 数据库