基本使用:
依赖:
implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'
使用:
//Glide3中的许多配置选项转移到了RequestOptions中
RequestOptions options = new RequestOptions();
options.placeholder(R.drawable.ic_launcher_background)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(false)
.override(Target.SIZE_ORIGINAL);
//Glide调用链中的类型转化:
Glide //Glide
.with(this) //RequsetManager
.load(url) //RequestBuilder<Drawable>
.apply(options) //RequestBuilder<Drawable>
.into(target); //Target<Drawable>
Glide的成员变量:
public class Glide implements ComponentCallbacks2 {
private static volatile Glide glide;
private static volatile boolean isInitializing;
//远程请求图片的核心类,同时也管理一些缓存
private final Engine engine;
private final BitmapPool bitmapPool;
private final MemoryCache memoryCache;
private final GlideContext glideContext;
private final Registry registry;
private final ArrayPool arrayPool;
//专门用来产生RequestManager,可以理解为RequestManagerFactory
private final RequestManagerRetriever requestManagerRetriever;
private final ConnectivityMonitorFactory connectivityMonitorFactory;
private final List<RequestManager> managers = new ArrayList<>();
private final RequestOptionsFactory defaultRequestOptionsFactory;
private MemoryCategory memoryCategory = MemoryCategory.NORMAL;
}
Glide.with
public class Glide implements ComponentCallbacks2 {
//requestManagerRetriever一般都用GlideBuilder里默认生成的
private final RequestManagerRetriever requestManagerRetriever;
public static RequestManager with(Context context){
//Glide把生成RequestManager的任务都交给了RequestManagerRetriever:
return getRetriever(context).get(context);
}
//其他with方法都是类似的写法,略
public static RequestManager with(Activity activity);
public static RequestManager with(FragmentActivity activity);
public static RequestManager with(Fragment fragment);
public static RequestManager with(android.app.Fragment fragment);
public static RequestManager with(View view);
private static RequestManagerRetriever getRetriever(Context context) {
return Glide.get(context).getRequestManagerRetriever();
}
}
RequestManagerRetriever
public class RequestManagerRetriever implements Handler.Callback {
//全局的RequestManager,如果with(Context)的参数传了Application就会返回这个RequestManager单例
private volatile RequestManager applicationManager;
//1.获取全局的RequestManager单例;
private RequestManager getApplicationManager(Context context) {
return applicationManager //双重检查锁单例,略
}
//2.获取Fragment和FragmentActivity的RequestManager
private RequestManager supportFragmentGet(Context context,
FragmentManager fm,Fragment parentHint,boolean isParentVisible);
//3.获取android.app.Fragment和Activity的RequestManager
private RequestManager fragmentGet(Context context,android.app.FragmentManager fm,
android.app.Fragment parentHint,boolean isParentVisible);
//以下是伪代码:根据参数类型不同调用上面三个方法生成RequestManager
public RequestManager get(xxx) {
//在子线程或是Application返回全局的RequestManager单例
if (Util.isOnBackgroundThread() || xxx instanceof Application) {
return getApplicationContext());
}
//原生android.appfragment调用fragmentGet
else if(xxx instanceof android.app.Fragment fragment){
android.app.FragmentManager fm = fragment.getChildFragmentManager();
return fragmentGet(fragment.getActivity(), fm, fragment, fragment.isVisible());
}
//原生Activity调用fragmentGet
else if(xxx instanceof Activity){
android.app.FragmentManager fm = activity.getFragmentManager();