zoukankan      html  css  js  c++  java
  • 《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线程

  • 相关阅读:
    网站图片上传,水印,预览,截图
    go语言中的数组切片:特立独行的可变数组
    Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
    MongoDB删除文档
    顺为资本CEO许达来:为什么说中国创业者很幸福?(附PPT)
    星瀚资本杨歌:我七次创业失败的内心感悟(比较真实,可以看看创业的36条军规)
    晨兴资本刘芹:入行16年我才刚理解创投,有8个最深感悟
    20 个免费开源的 CSS3 用户界面工具包
    Google浏览器的缓存文件过大(mega网站导致的)
    FastSocket客户端/服务端通讯示例
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/8509500.html
Copyright © 2011-2022 走看看