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

77 阅读3分钟

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

从本次课开始也将正式进入Android开发的核心环节了,这篇笔记也将着重记录Android开发当中数据存储和网络通信的相关知识,并进行一个针对性的汇总。

网络通信

网络请求的简介

大致的一个流程就是客户端首先向服务端发送请求,然后服务端返送数据给到客户端,为了更好的支持业务迭代,一般会进行网络请求的封装。

网络框架对比

请求方式作者包体积增量使用成本
httpURLConnectionAndroid SDK0kb2n
volleyGoogle57kbn
OkHttpsquare262kb1.5n
Retrofitsquare343kb2n

发送网络请求的实例

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
        }
    })
}

TTNet

TTNet是字节跳动通用的网络请求封装框架,用来向服务端发起请求。

目前Android端上的头条,抖音,番茄小说都在使用该库作为网络请求封装框架,作为字节内部的基础库,提供了一整套Android客户端网络请求解决方案。 其优点是:
1.基于Retrofit改造,具备了Retrofit所具有的优点
2.支持多个Http网络库的动态切换
3.支持网络拦截配置:添加公共参数,动态切换协议及Host,动态选路等
4.支持流解析,json序列化

网络请求总结

image.png

数据存储

数据存储的简介

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

  1. Sharedpreferences
  2. 文件存储
  3. ContentProvider
  4. SQLite存储数据

Room数据库的运用

Room是 Google Jetpack 家族里的一员,Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库,其主要有三个组件:

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

Room原理

  • 编译期,通过kapt处理@``Dao@Database注解,动态生成对应的实现类
  • 底层使用Android提供的SupportSQLiteOpenHelper实现数据库的增删改查等操作

总结

本篇笔记主要对数据存储与网络通信的知识点做了一个简要的记录,同时也对字节自研的TTNet框架以及Room数据库做了一个简要介绍。在之后的实际开发环节也将会对这些知识进行具体的运用。