OkhttpClientの構成

3768 ワード

あなたのアプリでPicasso+Okhttp+RetrofitまたはGlide+Okhttp+Retrofitを使用しているとします.画像のキャッシュを制御するには、グローバルなOkhttpClinetが必要です.(Picassoは元々キャッシュファイルの取得をサポートしていないため、キャッシュを行うためにネットワークフレームワークが必要である.https://github.com/square/picasso/issues/1025
OkHttpClientを設定しない場合、PicassoはデフォルトでdefaultOkHttpClientを作成しますが、このdefaultOkHttpClientはキャッシュ応答データをファイルシステムに設定していません.
private static OkHttpClient defaultOkHttpClient() {
    OkHttpClient client = new OkHttpClient();
    client.setConnectTimeout(Utils.DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
    client.setReadTimeout(Utils.DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
    client.setWriteTimeout(Utils.DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
    return client;
  }

そのため、ネットワークのキャッシュとピクチャのキャッシュを管理するグローバルなOkHttpClientが必要です.
  • グローバルなOkHttpClientが必要です.public class OkHttpUtils {
      private static OkHttpClient client;
    
      public static OkHttpClient getClient() {
          if (client == null) {
              synchronized (OkHttpUtils.class) {
                  if (client == null) {
                      client = new OkHttpClient.Builder()
                              .retryOnConnectionFailure(true)
                              .connectTimeout(15, TimeUnit.SECONDS)
                              //    
                              .cache(new Cache(new File(Environment.getExternalStorageDirectory().getPath() + NXDataConfig.APP_NET_DIR), NXDataConfig.APP_NET_SIZE);
                              .build();
                  }
              }
          }
          return client;
      }
    
    }
  • それからApplicationの中であなたのPicassoのOkHttpClient
  • を配置します
        protected void configPicasso() {
                int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 8);
                Picasso picasso = new Picasso.Builder(getApplicationContext())
                        .memoryCache(new LruCache(maxMemory))
                        .downloader(new OkHttp3Downloader(OkHttpUtils.getClient()))
                        .build();
                // picasso.setIndicatorsEnabled(true); // For debugging
                Picasso.setSingletonInstance(picasso);
            }
    

    ここで、私が使っているのはOkhttp 3です.2.0 OkHttpDownloader okHttpDownloaderを直接使用することはできません.
    https://github.com/square/picasso/issues/1256
    これでOkttp+Picassoの構成が完了する.ではGlideもあまり差がありません.Glideの抜き差し能力は比較的強く,VolleyやOkhttpなどのネットワークフレームワークを受け入れることができる.
    https://github.com/bumptech/glide/wiki/Integration-Libraries
  • ここで、私はやはりOkhttp 3を使います.2.0.Glideを構成するには、GlideModuleを実装する必要があります.具体コード:
  • public class NXGlideConfig implements GlideModule {
    
        @Override
        public void applyOptions(Context context, GlideBuilder builder) {
            int size = (int) (Runtime.getRuntime().maxMemory() * 0.8);
                //    
            builder.setDiskCache(new InternalCacheDiskCacheFactory(context, size));
               //    
            builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, NXDataConfig.APP_IMAGE_DIR, NXDataConfig.APP_IMAGE_SIZE));
         + "  defaultBitmapPoolSize:" + defaultBitmapPoolSize);
        }
    
        @Override
        public void registerComponents(Context context, Glide glide) {
            OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(OkHttpUtils.getClient());
            glide.register(GlideUrl.class, InputStream.class, factory);
        }
    }
    
  • そしてAndroidManifest.xmlに登録する
    
    
  • 混同を処理するのを忘れないでください.
    ##Glide2OkHttp
    -keep class com.bumptech.glide.integration.okhttp.OkHttpGlideModule
    -keep public class * implements com.bumptech.glide.module.GlideModule
    

    10年の生死は茫漠としていて、考えないで、自分で忘れられない.千里の孤墓、どこにも言葉がなくて寂しい.たとえ出会っても知らないべきで、ほこりは満面で、鬢は霜のようだ.