这是我参与「第四届青训营 」笔记创作活动的第4天
从本次课开始也将正式进入Android开发的核心环节了,这篇笔记也将着重记录Android开发当中数据存储和网络通信的相关知识,并进行一个针对性的汇总。
网络通信
网络请求的简介
大致的一个流程就是客户端首先向服务端发送请求,然后服务端返送数据给到客户端,为了更好的支持业务迭代,一般会进行网络请求的封装。
网络框架对比
请求方式 | 作者 | 包体积增量 | 使用成本 |
---|---|---|---|
httpURLConnection | Android SDK | 0kb | 2n |
volley | 57kb | n | |
OkHttp | square | 262kb | 1.5n |
Retrofit | square | 343kb | 2n |
发送网络请求的实例
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序列化
网络请求总结
数据存储
数据存储的简介
持久性的本地数据存储是Android中常见的能力,可以在应用被杀死的情况下,而保持数据不会被清除。我们可以根据不同场景的诉求,可以选用不同的存储方式,常见的数据存储主要有以下4种
- Sharedpreferences
- 文件存储
- ContentProvider
- SQLite存储数据
Room数据库的运用
Room是 Google Jetpack 家族里的一员,Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库,其主要有三个组件:
- 数据库类(
Database
),用于保存数据库并作为应用持久性数据底层连接的主要访问点。
- 数据实体(
Entity
),用于表示应用的数据库中的表。
- 数据访问对象(
DAO
),提供您的应用可用于查询、更新、插入和删除数据库中的数据的方法。
Room原理
- 编译期,通过kapt处理
@``Dao
、@Database
注解,动态生成对应的实现类
- 底层使用Android提供的
SupportSQLiteOpenHelper
实现数据库的增删改查等操作
总结
本篇笔记主要对数据存储与网络通信的知识点做了一个简要的记录,同时也对字节自研的TTNet框架以及Room数据库做了一个简要介绍。在之后的实际开发环节也将会对这些知识进行具体的运用。