OKHttp源码解析-ConnectionPool对Connection重用机制&Http/Https/SPDY协议选择

因文章很快被人转载到一些其他网站,所以本人在此声明:
转载请标明转载出处:http://frodoking.github.io/2015/06/29/android-okhttp-connectionpool-http1-x-http2-x/

距离上一次的OKHttp源码解析过去快3月了。最近一直在忙工作上的事情,另外也再尝试一门新的语言Go。所以一直没花很多心思在Android这边。最近看到一些网友建议把okhttp的连接池对Connection的重用维护机制以及HTTP和SPDY协议如何得到区分这两个核心内容做深入的分析。
因此,这几天就打算好好说一说这块儿的实现方式。SPDY既是http1.x的增强版也是http2.x的过渡版本,虽然现在很多都直接切入到http2.0,不过SPDY的应用仍然值得关注。

Retrofit源码解析

之前花了一段时间整理过一篇文章OKHttp源码解析。所以今天打算把一个包装工具Retrofit做一下源码解析。

Retrofit和Java领域的ORM概念类似,ORM把结构化数据转换为Java对象,而Retrofit把REST API返回的数据转化为Java对象方便操作。同时还封装了网络代码的调用。这个网络代码默认采用了OKHttp的方式。

从Eclipse到Intellij

由于本人最近项目做过一次从eclipse到intellij切换的分享会,本来打算把相关的技术文档发给组员就可以完事。但是发现很多同学在切换的过程中仍然感觉到很难受,所以我打算把这次分享会的内容以文章的形式呈现出来。给更多的同学使用。

此文章是个人工作中的一次总结,当看到网上很多ctrl+c,ctrl+v的文章的时候。个人觉得还不如自己总结一下整个流程来得真实。这也是写本文章的一个动机。

前提

在我们公司将软件工程师简称RD(Research Development)。所以我们从事着一份富有创造力和探究精神的职业。我们秉承软件工程师 ≠ 码农的职业路线,在科学技术的道路上不断探索、创造和前行着。我相信跟我同样职业的大部分人都有着自己“高傲”的一面,遇到问题解决问题以及不服的劲头经常出现。我是一个有着代码洁癖的人,以前遇到一个很好的架构师对方法和{}之间的空隙都有着严格的要求。当时的我是那么的不理解,但是当代码量越来越大的时候,好的编码格式就体现的是那么的明显。工作中好的东西需要我们有敢于尝试的勇气,这样对于我们提升自己我驱动的效率会高很多。所以很希望同行的同学们都保持一种高质量的创造水准,一起同行吧。。。

事件总线 —— otto的bus和eventbus对比分析

因文章很快被人转载到一些其他网站,所以本人在此声明:
转载请标明转载出处:http://frodoking.github.io/2015/03/30/android-eventbus-otto-analysis/

##出现场景
为了简化并且更加高质量的在Activities, Fragments, Threads, Services等等之间的通信,同时解决组建之间的高耦合还能继续高效的通信。事件总线设计出现了。
总线,在计算机组成原理中遇到过io总线。总线的思路就是负责传递某种object到指定的地方。
在Android内置的Intent和BroadcastReceiver就是采用了类似事件总线的设计思路。这两者都可以起到跟事件总线类似的效果。注册广播接收器和单纯发一个intent就可以唤起其他组件,提醒其他组件更新,这是非常方便的,同时也是本文提到的两个开源方案所做不到的。但也有不好地方,它们内部的实现都需要 IPC,单从传递效率上来讲,可能并不太适合上层的组件间通信。本文章主要讨论的app内部组件间的通信。

UI的整体设计思路(避免臃肿的UI)

一直打算把工作中关于Android的UI相关事情写一写。由于时间紧张,拖延到今天。
本文打算从基本代码的整理到UI的整体设计详细系统的讲述一下。

XML相关UI的整理

由于本人很早就在开始使用Android studio,对xml格式的layout整理相当得心应手。
很多开发初期的同学在不熟悉xml布局情况下,总是喜欢为了实现一个效果而不计较布局的层次。比如:

OKHttp源码解析

因文章很快被人转载到一些其他网站,所以本人在此声明:
转载请标明转载出处:http://frodoking.github.io/2015/03/12/android-okhttp/

Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池,已足够满足我们各种HTTP请求的需求。但更高效的使用HTTP可以让您的应用运行更快、更节省流量。而OkHttp库就是为此而生。

OkHttp是一个高效的HTTP库:

  • 支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求
  • 如果SPDY不可用,则通过连接池来减少请求延时
  • 无缝的支持GZIP来减少数据流量
  • 缓存响应数据来减少重复的网络请求

会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。

使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果您用了 Apache HttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块。

OKHttp源码位置https://github.com/square/okhttp