《Android进阶之光》--网络编程与网络框架

No1:

Volley源码分析:

Volley.newRequestQueue->

RequestQueue.start()->

CacheDispatcher.start()->CacheDispatcher.run()->

NetworkDispatcher.start()->NetworkDispatcher.run()->

RequestQueue.add()->

BasicNetwork.performRequest()->

HttpStack.performRequest()->

Delivery.postResponse()->

ExecutorDelivery.ResponseDeliveryRunnable->

Request.deliverResponse()->

Response.Listener.onResponse()->

说明:

Volley分为三类线程,分别是主线程、缓存调度线程和网络调度线程,其中网络调度线程默认开启4个。

首先请求会加入缓存队列,缓存调度线程从缓存队列中取出请求。如果找到该请求的缓存响应就直接读取缓存的响应并解析,然后回调给主线程;

如果没有找到缓存的响应,则将这条请求加入网络队列,然后网络调度线程会轮询取出网络队列中的请求,取出后发送HTTP请求,解析响应并将响应存入缓存,并回调给主线程。

No2:

OkHttp源码分析:

OkHttpClient.newCall(request)->

RealCall.enqueue->

Dispatcher.enqueue->

RealCall.execute->

client.dispatcher().finished()->promoteCalls->

AsyncCall.execute->getResponseWithInterceptorChain->getResponse()->

HttpEngine.sendRequest->readResponse->

RealCall.getResponse->

HttpEngine.recover->

No3:

Okhttp连接池复用的核心就是用Deque<RealConnection>来存储连接,通过put、get、connectionBecameIdle和evictAll几个操作来对Deque进行操作,另外通过判断连接中的计数对象StreamAllocation来进行自动回收连接。

No4:

Retrofit注解分类

1)HTTP请求方式注解:GET、POST、PUT、DELETE、HEAD、PATCH、OPTIONS、HTTP(可替换或扩展前7种)

2)标记类注解:FormUrlEncoded、Multipart、Streaming(流)

3)参数类注解:Header、Headers、Body、Path、Field、FieldMap、Part、PartMap、Query、QueryMap

No5:

Retrofit源码解析

Retrofit.Builder()->

Platform.get()->findPlatform->

Retrofit.build()->

Retrofit.create->loadServiceMethod->

ServiceMethod.Builder->

ExecutorCallAdapterFactory.get->

ExecutorCallbackCall.enqueue->

delegate.enqueue->OkHttpCall.enqueue->

okhttp3.Call.enqueue->parseResponse->toResponse->

GsonConverterFactory.responseBodyConverter->

GsonResponseBodyConverter.convert->

Call.enqueue方法主要做的就是用OkHttp来请求网络,将返回的Response进行数据转换并回调给UI线程

posted @   嘉禾世兴  阅读(389)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示