OkhttpClientの構成
3768 ワード
あなたのアプリでPicasso+Okhttp+RetrofitまたはGlide+Okhttp+Retrofitを使用しているとします.画像のキャッシュを制御するには、グローバルなOkhttpClinetが必要です.(Picassoは元々キャッシュファイルの取得をサポートしていないため、キャッシュを行うためにネットワークフレームワークが必要である.https://github.com/square/picasso/issues/1025
OkHttpClientを設定しない場合、PicassoはデフォルトでdefaultOkHttpClientを作成しますが、このdefaultOkHttpClientはキャッシュ応答データをファイルシステムに設定していません.
そのため、ネットワークのキャッシュとピクチャのキャッシュを管理するグローバルなOkHttpClientが必要です.グローバルなOkHttpClientが必要です.public class OkHttpUtils { それからApplicationの中であなたのPicassoのOkHttpClient を配置します
ここで、私が使っているのは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を実装する必要があります.具体コード: そしてAndroidManifest.xmlに登録する 混同を処理するのを忘れないでください.
10年の生死は茫漠としていて、考えないで、自分で忘れられない.千里の孤墓、どこにも言葉がなくて寂しい.たとえ出会っても知らないべきで、ほこりは満面で、鬢は霜のようだ.
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が必要です.
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;
}
} 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
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);
}
}
##Glide2OkHttp
-keep class com.bumptech.glide.integration.okhttp.OkHttpGlideModule
-keep public class * implements com.bumptech.glide.module.GlideModule
10年の生死は茫漠としていて、考えないで、自分で忘れられない.千里の孤墓、どこにも言葉がなくて寂しい.たとえ出会っても知らないべきで、ほこりは満面で、鬢は霜のようだ.