Glide作为一个优秀的图片加载框架,有很多值得我们学习的地方,这次我们来看看它是如何管理图片加载的请求吧;特别是它是如何感知Activity/Fragment的生命周期的方式。
文章目录
在Glide中会把每个图片加载请求封装成一个Request对象,而这些Request对象的管理里是RequestManager。在了解Request Manager对Request管理之前,我们先来看下Glide请求显示过程,请求过程大致如下时序图所示:
时序图中省略了RequestManager对象创建、Request具体加载过程等细节;关于Request具体加载过程,我们以后的文章再讲解,我们这篇文章主要看下RequestManager对象创建、它是如何感知Activity/Fragment生命周期以及它对Request的管理。
RequestManager对象创建
RequestManager,从名称也能看出它是管理Request的对象,事实上也确实如此。RequestManager对象创建是在RequestManagerRetriever.get()方法过程中实现的, RequestManagerRetriver有多个重载的get()方法,这跟调用Glide.with()时传入的参数有关。
public RequestManager get(@NonNull Activity activity){
...}
public RequestManager get(@NonNull FragmentActivity activity){
...}
public RequestManager get(@NonNull Context context){
...}
public RequestManager get(@NonNull Fragment fragment){
...}
public RequestManager get(@NonNull android.app.Fragment fragment){
...}
public RequestManager get(@NonNull View view){
...}
虽重载方法有6个,但实际上创建RequestManager对象只有5种情况:
- Activity
- FragmentActivity
- Fragment
- android.app.Fragment
- Application Context
除了ApplicationContext,其他几种情况都会创建一个SupportRequestManagerFragment(备注:Activity和android.app.Fragment情况会创建RequestManagerFragment,后面的分析都是基于SupportRequestManagerFragment,他们的原理是一致的)与创建的RequestManager对象关联;RequestManager对Request的管理会受SupportRequestManagerFragment生命周期的影响。接下来我们看下RequestManager对象创建过程,先看RequestManagerRetriever.get(FragmentActivity activity)
方法
//RequestManagerRetriever.java
@NonNull
public RequestManager get(@NonNull FragmentActivity activity) {
if (Util.isOnBackgroundThread()) {
//如果是非UI线程,则调用get(Context context)方法,并传入Application Context
return get(activity.getApplicationContext());<