当前位置:网站首页>Glide conclusion
Glide conclusion
2022-07-05 10:16:00 【asahi_ xin】
Custom module
In most cases , Only one line of code is needed to load the image . When we need to change the default configuration , You need to customize the module .
First define your own module class .
public class MyGlideModule implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
stay AndroidManifest.xml Add the following configuration to the file .
<application ...>
<meta-data
android:name="test.nxx.myapplication.MyGlideModule"
android:value="GlideModule" />
</application>
If you want to change Glide Default configuration , In fact, it only needs to be in applyOptions() Method in advance of the method Glide It is OK to initialize the configuration item of .
- setMemoryCache()
Used for configuration Glide Memory cache strategy of , The default configuration is LruResourceCache. - setBitmapPool()
Used for configuration Glide Of Bitmap Buffer pool , The default configuration is LruBitmapPool. - setDiskCache()
Used for configuration Glide Hard disk cache strategy of , The default configuration is InternalCacheDiskCacheFactory. - setDiskCacheService()
Used for configuration Glide An asynchronous actuator that reads images from the cache , The default configuration is FifoPriorityThreadPoolExecutor, That's the first in, first out principle . - setResizeService()
Used for configuration Glide Asynchronous executor that reads non cached images , The default configuration is also FifoPriorityThreadPoolExecutor. - setDecodeFormat()
Used for configuration Glide The decoding mode of loading picture , The default configuration is RGB_565.
Example
public class MyGlideModule implements GlideModule {
public static final int DISK_CACHE_SIZE = 500 * 1024 * 1024;
@Override
public void applyOptions(Context context, GlideBuilder builder) {
// Cache pictures to SD card
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, DISK_CACHE_SIZE));
// Picture format changed to ARGB_8888
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
Replace Glide Components
Gilde The network request used is HttpURLConnection, If you want to cache okHttp It needs to be replaced Glide Components .
public class OkHttpStreamFetcher implements DataFetcher<InputStream> {
private final Call.Factory client;
private final GlideUrl url;
private InputStream stream;
private ResponseBody responseBody;
private volatile Call call;
public OkHttpStreamFetcher(Call.Factory client, GlideUrl url) {
this.client = client;
this.url = url;
}
@Override
public InputStream loadData(Priority priority) throws Exception {
Request.Builder requestBuilder = new Request.Builder().url(url.toStringUrl());
for (Map.Entry<String, String> headerEntry : url.getHeaders().entrySet()) {
String key = headerEntry.getKey();
requestBuilder.addHeader(key, headerEntry.getValue());
}
Request request = requestBuilder.build();
Response response;
call = client.newCall(request);
response = call.execute();
responseBody = response.body();
if (!response.isSuccessful()) {
throw new IOException("Request failed with code: " + response.code());
}
long contentLength = responseBody.contentLength();
stream = ContentLengthInputStream.obtain(responseBody.byteStream(), contentLength);
return stream;
}
@Override
public void cleanup() {
try {
if (stream != null) {
stream.close();
}
} catch (IOException e) {
// Ignored
}
if (responseBody != null) {
responseBody.close();
}
}
@Override
public String getId() {
return url.getCacheKey();
}
@Override
public void cancel() {
Call local = call;
if (local != null) {
local.cancel();
}
}
}
public class OkHttpUrlLoader implements StreamModelLoader<GlideUrl> {
private final Call.Factory client;
public OkHttpUrlLoader(Call.Factory client) {
this.client = client;
}
@Override
public DataFetcher<InputStream> getResourceFetcher(GlideUrl model, int width, int height) {
return new OkHttpStreamFetcher(client, model);
}
public static class Factory implements ModelLoaderFactory<GlideUrl, InputStream> {
private static volatile Call.Factory internalClient;
private Call.Factory client;
public Factory() {
this(getInternalClient());
}
public Factory(Call.Factory client) {
this.client = client;
}
private static Call.Factory getInternalClient() {
if (internalClient == null) {
synchronized (Factory.class) {
if (internalClient == null) {
internalClient = new OkHttpClient();
}
}
}
return internalClient;
}
@Override
public ModelLoader<GlideUrl, InputStream> build(Context context, GenericLoaderFactory factories) {
return new OkHttpUrlLoader(client);
}
@Override
public void teardown() {
}
}
}
stay MyGlideModule call
public class MyGlideModule implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
}
@Override
public void registerComponents(Context context, Glide glide) {
glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory());
}
}
That's it .
Of course Glide The government has provided us with very simple HTTP Component replacement method .
implementation 'com.github.bumptech.glide:okhttp3-integration:1.5.0'
边栏推荐
- 官网给的这个依赖是不是应该为flink-sql-connector-mysql-cdc啊,加了依赖调
- MySQL数字类型学习笔记
- Openes version query
- 一种用于干式脑电图的高密度256通道电极帽
- [NTIRE 2022]Residual Local Feature Network for Efficient Super-Resolution
- Unity粒子特效系列-毒液喷射预制体做好了,unitypackage包直接用 - 上
- Six simple cases of QT
- @JsonAdapter注解使用
- The most complete is an I2C summary
- Z-blog template installation and use tutorial
猜你喜欢
字节跳动面试官:一张图片占据的内存大小是如何计算
StaticLayout的使用详解
The most complete is an I2C summary
B站大量虚拟主播被集体强制退款:收入蒸发,还倒欠B站;乔布斯被追授美国总统自由勋章;Grafana 9 发布|极客头条...
Wechat applet - simple diet recommendation (2)
Six simple cases of QT
What is the origin of the domain knowledge network that drives the new idea of manufacturing industry upgrading?
Unity粒子特效系列-毒液喷射预制体做好了,unitypackage包直接用 -下
Windows uses commands to run kotlin
How to write high-quality code?
随机推荐
Fluent generates icon prompt logo widget
一种用于干式脑电图的高密度256通道电极帽
基于单片机步进电机控制器设计(正转反转指示灯挡位)
Comment obtenir le temps STW du GC (collecteur d'ordures)?
QT realizes signal transmission and reception between two windows
双容水箱液位模糊PID控制系统设计与仿真(Matlab/Simulink)
Single chip microcomputer principle and Interface Technology (esp8266/esp32) machine human draft
横向滚动的RecycleView一屏显示五个半,低于五个平均分布
如何写出高质量的代码?
天龙八部TLBB系列 - 关于包裹掉落的物品
QT event filter simple case
The Alipay in place function can't be found, and the Alipay in place function is offline
A large number of virtual anchors in station B were collectively forced to refund: revenue evaporated, but they still owe station B; Jobs was posthumously awarded the U.S. presidential medal of freedo
Those who are good at using soldiers, hide in the invisible, and explain the best promotional value works in depth in 90 minutes
如何获取GC(垃圾回收器)的STW(暂停)时间?
宝塔面板MySQL无法启动
Unity粒子特效系列-毒液喷射预制体做好了,unitypackage包直接用 -下
MySQL字符类型学习笔记
Getting started with Apache dolphin scheduler (one article is enough)
把欧拉的创新带向世界 SUSE 要做那个引路人