zoukankan      html  css  js  c++  java
  • 学习进度条72

    Okhttp 中几个重要类的介绍

    OkHttpClient

    这个类主要是用来配置 okhttp 这个框架的,通俗一点讲就是这个类是管理这个框架的各种设置的。

    Call 类的工厂,通过 OkHttpClient 才能得到 Call 对象。

    OkHttpClient 使用注意

    OkHttpClient 应该被共享,使用 okhttp 这个框架的时候,最好要将 OkHttpClient 设置成单例模式,所有的 HTTP 在进行请求的时候都要使用这一个 Client 。因为每个 OkHttpClient 都对应了自己的连接池和线程池。减少使用连接池和线程池可以减少延迟和内存的使用。相反的如果每个请求都创建一个 OkHttpClient 的话会很浪费内存资源。

    OkHttpClient的创建

    OkHttpClient 有三个创建方法

    第一个方法:直接使用 new OkHttpClient() 来创建一个实例对象就可以了,这个实例对象有默认的配置。默认请求连接超时时间 10 s ,读写超时时间 10 s,连接不成功会自动再次连接。

    第二个方法:就是通过 Builder的方式来自己定义一个 OkHttpclient 。当然如果你直接 build 没有自己配置参数的话,效果和第一个方法是一样的。

    public final OkHttpClient = new OkHttpClient.Builder()

      .addInterceptor(new HttpLoggingInterceptor())

      .cache(new Cache(cacheDir,cacheSize))

      .等等配置

      .build();

    第三个方法:就是通过已有的 OkHttpClient 对象来复制一份共享线程池和其他资源的 OkHttpClient 对象。

    OkHttpClient agerClient = client.newBuilder()

      .readTimeout(500,TimeUnit.MILLSECONS)

      .build();

    这种方法的好处就是,当我们有一个特殊的请求,有的配置有点不一样,比如要求连接超过 1 s 就算超时,这个时候我们就可以使用这个方法来生成一个新的实例对象,不过他们共用很多其他的资源,不会对资源造成浪费。

    关于 OkHttpClient 的配置改变都在 Builder 中进行

    不需要了可以关闭

    其实持有的线程池和连接池将会被自定释放如果他们保持闲置的话。

    你也可以自动释放,释放后将来再调用 call 的时候会被拒接。

    client.dispatcher().excurorService().shutdown()

    清除连接池,注意清除后,连接池的守护线程可能会立刻退出。

    client.connectionPool().evictAll()

    如果 Client 有缓存,可以关闭。注意:再次调用一个被关闭的 cache 会发生错误。也会造成 crash。

    client.cache().close();

    OkHttp 在 HTTP/2 连接的时候也会使用守护线程。他们闲置的时候将自动退出。

    知道有这么一回事就行,一般不会主动调用。

  • 相关阅读:
    django组件,有分页器(重要的很)
    wusir的django
    git 生成ssh key
    阶乘问题的题解
    拱猪计分的题解
    子数整数的题解
    安全逃离的题解
    题解 P1262 【间谍网络】
    斗地主的题解
    鸭王的题解
  • 原文地址:https://www.cnblogs.com/hhw12345/p/14910650.html
Copyright © 2011-2022 走看看