面试专题OKhttp详解2

面试专题OKhttp详解终结篇

http协议

第一行:请求行

请求行下面的:请求属性集

问题一:选择网络访问框架的时候,为什么要选择OkHttp而不是其他框架;

明确一点: 并不期待,你将市面上所有的框架都全部搞得非常清楚,优缺点全部列出来;你是否具备掌控网络访问框架的能力;

这个问题没有标准答案,最好是带点主观意识

OkHttp

  • XUtil 支持网络请求,图片加载,甚至还能操作数据库;就我个人而言,我认为,一个好的网络访问框架应该只专注一件事

  • Retrofit 肯定这个框架不错,它封装了OkHttp,所以我暂时没有去深入了解它,

  • Volley 官方出品,官方介绍适合小中型app,接口比较多,访问量比较大;基于HttpUrlConnection封装,(HttpUrl。。。 android 2.3以下api)

就我个人而言,我更希望能够更加深入的去了解网络访问框架

OkHttp基于Socket通信,它更倾向于底层,会对Http协议进行完全的封装,我在学习这个框架的时候,可以更加底层的了解;我相信只要我能搞定okhttp,那么其他的访问框架,都很容易懂;

问题二:OkHttp中为什么使用构建者模式?

使用多个简单的对象一步一步构建成一个复杂的对象;

  • 优点: 当内部数据过于复杂的时候,可以非常方便的构建出我们想要的对象,并且不是所有的参数我们都需要进行传递;

  • 缺点: 代码会有冗余

问题三:怎么设计一个自己的网络访问框架,为什么这么设计?

我目前还没有正式设计过网络访问框架,

是我自己设计的话,我会从以下两个方面考虑

  • 先参考现有的框架,找一个比较合适的框架作为启动点,比如说,基于上面讲到的okhttp的优点,选择okhttp的源码进行阅读,并且将主线的流程抽取出,为什么这么做,因为okhttp里面虽然涉及到了很多的内容,但是我们用到的内容并不是特别多;保证先能运行起来一个基本的框架;

  • 考虑拓展,有了基本框架之后,我会按照我目前在项目中遇到的一些需求或者网路方面的问题,看看能不能基于我这个框架进行优化,比如服务器它设置的缓存策略,

我应该如何去编写客户端的缓存策略去对应服务器的,还比如说,可能刚刚去建立基本的框架时,不会考虑HTTPS的问题,那么也会基于后来都要求https,进行拓展;

为什么要基于Okhttp,就是因为它是基于Socket,从我个人角度讲,如果能更底层的深入了解相关知识,这对我未来的技术有很大的帮助;

okhttp流程 原理 关键类

okhttp 关键类

OKHttpClient Request Call-RealCall.enqueue

synchronized (this) {

if (executed) throw new IllegalStateException(“Already Executed”);

executed = true;

}

synchronized void enqueue(AsyncCall call) {

当运行的队列中的数值小于64, 并且同时访问同一个机器目标HOST请求书小于5直接加入到运行队列,不然的话就加入到等待队列

if (runningAsyncCalls.size() < maxRequests && runningCallsForHost(call) < maxRequestsPerHost) {

runningAsyncCalls.add(call);

executorService().execute(call);

} else {

readyAsyncCalls.add(call);

}

}

Response response = getResponseWithInterceptorChain();

获取响应的数据

okhttp基本流程

1: 先搞懂责任链是个啥?基于责任链搞清楚reponse okhttp

2:搞清楚拦截器

最后:学习总结——Android框架体系架构知识脑图(纯手绘xmind文档)

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。

下方即为我手绘的Android框架体系架构知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的Android框架体系架构知识脑图原件(包括上方的面试解析xmind文档)

除此之外,前文所提及的Alibaba珍藏版 Android框架体系架构 手写文档以及一本 《大话数据结构》 书籍等等相关的学习笔记文档,也皆可分享给认可的朋友!

——感谢大家伙的认可支持,Free Download请注意:点赞+点赞+点赞!!!
CrfZCT-1646477040074)]

除此之外,前文所提及的Alibaba珍藏版 Android框架体系架构 手写文档以及一本 《大话数据结构》 书籍等等相关的学习笔记文档,也皆可分享给认可的朋友!

——感谢大家伙的认可支持,Free Download请注意:点赞+点赞+点赞!!!
自行下载领取链接:【Git】

Android面试分析一:关于OKhttp详解(附带视频教程,flutter游戏全屏相关推荐

  1. Android面试之Activity生命周期详解

    Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...

  2. android性能优化面试,Android面试心得必备技能储备详解

    写在文章前面的话: "工欲行其事,必先利其器",英雄和侠客更需要宝剑助己成功.同样,在现代软件开发环境中,每个Android开发者都需要更好的工具,帮助我们增强功能.提高效率. 在 ...

  3. 分布式文件系统FastDFS详解-附带视频教程

    目录 1.FastDFS教程 2.FastDFS安装 安装FastDFS FastDFS配置文件详解 FastDFS启动 3.FastDFS重启与FastDFS关闭 FastDFS关闭 4.FastD ...

  4. Android面试收集录4 Fragment详解

    1.什么是Fragment? 你可以简单的理解为,Fragment是显示在Activity中的Activity. 它可以显示在Activity中,然后它也可以显示出一些内容. 因为它拥有自己的生命周期 ...

  5. Android 事件分发机制分析及源码详解

    Android 事件分发机制分析及源码详解 文章目录 Android 事件分发机制分析及源码详解 事件的定义 事件分发序列模型 分发序列 分发模型 事件分发对象及相关方法 源码分析 事件分发总结 一般 ...

  6. android doze模式源码分析,Android Doze模式启用和恢复详解

    从Android 6.0(API level 23)开始,Android提出了两个延长电池使用时间的省电特性给用户.用户管理可以在没有充电的情况下管理app的行为.当用户一段时间没有使用手机的时候,D ...

  7. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

       本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...

  8. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  9. 【Android Camera1】Camera1 Parameters参数详解(一)—— Size (preview/picture/thumbnail)

    1.简介 本篇文章将对Camera1和Size相关的参数,逐个进行详细解析.在Camera1源码分析文章里.已阐述过相关源码.并提供了读取和更新Parameters的2个方法如下: 读取Paramet ...

最新文章

  1. 虚函数表剖析,网上转的,呵呵
  2. mysql创建表语句 引擎、编码和字符集设置
  3. 类与接口(五)java多态、方法重写、隐藏
  4. fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)...
  5. 美国计算机专业硏究生,2014年美国计算机专业研究生排名
  6. 2020年上半年内容行业版权报告
  7. 大数据 自学视频资料,纯分享
  8. 性能测试知多少---性能需求分析
  9. 几款Linux系统漏洞扫描、评估工具简介
  10. ECShop 二次开发常用网站
  11. 51单片机的蜂鸣器写歌的音阶
  12. 数博会“十佳大数据案例”发布,我们入选了。
  13. 基于DES加密的TCP聊天程序
  14. 每日算法_4月11日_02
  15. 浅谈windows 编程中SendMessage函数的妙用!!!
  16. 用C语言判断输入年份是否为闰年
  17. 百度Java面试题前200页和答案
  18. 在next js中添加google analytics功能
  19. 22/04/30本周总结
  20. 计算机在表格if用法,excel使用if判断单元格包含特定字符

热门文章

  1. 定时任务(每晚12点执行)
  2. latex 调整图片大小
  3. git 团队协作正确操作流程
  4. codeforces1359C Mixing Water
  5. 图像数据标记-图片筛选教程
  6. php微信摇一摇开发文档,微信摇一摇页面管理
  7. php微信摇一摇,怎样使用JS+H5实现微信摇一摇
  8. 王者无限火力服务器,王者无限火力2
  9. 消费者人群画像 python_如何正确打开相似人群画像算法
  10. 诺基亚安卓手机无法清理后台任务