最近在看Glide的源码的时候,发现Glide的生命周期的绑定居然跟Google的架构组件LifeCycle实现原理一模一样,都是通过创建一个隐形的Fragment来实现生命周期控制的。简单看下两者的实现方式(网上详细的写了一大堆,也写得非常好,这里只简单带下流程)
Glide的生命周期绑定:
Glide.with(context)入口
public static RequestManager with(Context context) {
RequestManagerRetriever retriever = RequestManagerRetriever.get();
return retriever.get(context);//通过单例RequestManagerRetriever获取一个RequestManager
}
**这个get方法才是重点**
RequestManagerRetriever类里面
根据context的类型去创建一个或者获取一个RequestManager对象
public RequestManager get(Context context) {
if (context == null) {
throw new IllegalArgumentException("You cannot start a load on a null Context");
} else if (Util.isOnMainThread() && !(context instanceof Application)) {
if (context instanceof FragmentActivity) {
return get((FragmentActivity) context);
} else if (context instanceof Activity) {
return get((Activity) context);
} else if (context instanceof ContextWrapper) {
//递归调用,获取上层Context的类型
return get(((ContextWrapper) context).getBaseContext());
}
}
//如果都不是上面类型,会创建一个Application级别的RequestManager对象
return getApplicationManager(context);
}
直接看下get((Activity) context)方法里面做了什么
public RequestManager get(Activity activity) {
if (Util.isOnBackgroundThread() || Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
return get(activity.getApplicationContext());
} else {
assertNotDestroyed(activity);
//重点就是在这了,通过activity去拿到FragmentManager,FM的作用就是负责管理Fragment
//如果第一次看这个过程,会比较迷糊,为什么要拿一个FM呢
android.app.FragmentManager fm = activity.getFragmentManager();