【问题标题】:Relation between okhttp and HttpURLConnectionokhttp 和 HttpURLConnection 的关系
【发布时间】:2017-05-13 13:50:49
【问题描述】:

很多人跟我说 HttpURLConnection 是从 android 4.4 开始基于 okhttp 的。

但是当我深入研究 okhttp 的代码时,OkHttpURLConnection 是从 HttpURLConnection 扩展的子类。

那么,okhttp是基于HttpURLConnection还是HttpURLConnection是基于okhttp呢?

我发现 HttpURLConnection 的实现来自 jdk 的 rt.jar。

希望有人能告诉我okhttp和HttpURLConnection的真正关系

【问题讨论】:

    标签: java android http okhttp


    【解决方案1】:

    我发现 HttpURLConnection 的实现来自 jdk 的 rt.jar。

    没有。 Android 在编译时或运行时不使用rt.jar

    okhttp是基于HttpURLConnection还是HttpURLConnection是基于okhttp?

    Android 对名为 HttpURLConnectionabstract 类的具体实现基于 Android 4.4 的 OkHttp 的一个分支。

    HttpURLConnection本身并没有绑定到OkHttp; HttpURLConnection 早于 Google 或 Square 存在。但是HttpURLConnection 是一个abstract 类——它本身没有用。 Java 运行时库需要HttpURLConnection 的具体实现,然后它可以使用它在URL 上实现诸如openConnection() 之类的方法,这需要返回一些HttpURLConnection 实现。

    FWIW,在 Android 4.3 及更早版本中,HttpURLConnection AFAIK 的具体实现是基于 Apache Harmony 实现,Android 中大多数 java.*javax.* 类的实现方式。

    【讨论】:

    • 很好的答案!而 OkHttp 本身最初是作为同一个 Apache Harmony 实现的一个分支!
    • @CommonsWare 那么这样说是否正确,因为 OkHttp 的分支回到了 Android 4.4,OkHttp 和 HttpURLConnection 已经分道扬镳了?我对使用 OkHttp 特别感兴趣,因为它“在网络出现问题时会坚持:它会从常见的连接问题中静默恢复”,因为我的应用程序的某些用户遇到了一些问题,我怀疑这些问题与连接问题有关使用 HttpURLConnection 获取位图。但是如果 HttpURLConnection 使用了和 OkHttp 一样的“坚持”技术,那就没有意义了。
    • @drmrbrewer:“这么说是否正确,因为 OkHttp 的分支回到 Android 4.4,OkHttp 和 HttpURLConnection 已经分道扬镳了?” -- 我没有运行任何差异,所以我不知道 AOSP 采用了哪些 OkHttp 更改。至少,作为一个库,当前版本的 OkHttp 会比某些版本的 Android 更新。它可能比所有版本的 Android 都更新。在转换你的代码方面......迁移到更好的 API,留下希望更好的连接处理。 :-)
    • @CommonsWare “更好的 API” 是 OkHttp?他们最近放弃对 Android 4 的支持有点复杂(除非通过一个单独的分支,该分支至少会在 2020 年 12 月结束之前得到支持......见medium.com/square-corner-blog/…)......所以它将转移到一个 API适当的时候被弃用(如果我希望继续支持 Android 4)。 (谁想成为开发人员?)
    • @drmrbrewer:我不知道有什么好的方法可以做到这一点——你可能想问一个关于 Stack Overflow 的新问题。
    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多