1、 Glide.with(context) 中根据context 实现生命周期管理,context 类型如下
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 this.get((FragmentActivity)context);
}
if (context instanceof Activity) {
return this.get((Activity)context);
}
if (context instanceof ContextWrapper) {
return this.get(((ContextWrapper)context).getBaseContext());
}
}
return this.getApplicationManager(context);
}
}
Lifecycle 与 Fragment 生命周期绑定
public RequestManager get(FragmentActivity activity) { if (Util.isOnBackgroundThread()) { //如果是子线程,默认是getApplicationContext 与应用生命周期一致 return this.get(activity.getApplicationContext()); } else { //传入activity 为例,查看生命周期管理 assertNotDestroyed(activity); //activity 与 fragement 绑定 android.support.v4.app.FragmentManager fm = activity.getSupportFragmentManager(); //fm 与 RequestManager 绑定 return this.supportFragmentGet(activity, fm); } }
RequestManager supportFragmentGet(Context context, android.support.v4.app.FragmentManager fm) { SupportRequestManagerFragment current = this.getSupportRequestManagerFragment(fm); RequestManager requestManager = current.getRequestManager(); if (requestManager == null) { //创建一个RequestManager 对象,将自定义的Lifesycle与Fragment 绑定 requestManager = new RequestManager(context, current.getLifecycle(), current.getRequestManagerTreeNode()); current.setRequestManager(requestManager); } return requestManager; }
SupportRequestManagerFragment getSupportRequestManagerFragment(android.support.v4.app.FragmentManager fm) { SupportRequestManagerFragment current = (SupportRequestManagerFragment)fm.findFragmentByTag("com.bumptech.glide.manager"); if (current == null) { current = (SupportRequestManagerFragment)this.pendingSupportRequestManagerFragments.get(fm); if (current == null) { //创建fragment,添加到集合中,然后移除 current = new SupportRequestManagerFragment(); this.pendingSupportRequestManagerFragments.put(fm, current); fm.beginTransaction().add(current, "com.bumptech.glide.manager").commitAllowingStateLoss(); this.handler.obtainMessage(2, fm).sendToTarget(); } } return current; } public class SupportRequestManagerFragment extends Fragment { private RequestManager requestManager; private final ActivityFragmentLifecycle lifecycle; private final RequestManagerTreeNode requestManagerTreeNode; private final HashSet<SupportRequestManagerFragment> childRequestManagerFragments; private SupportRequestManagerFragment rootRequestManagerFragment; public SupportRequestManagerFragment() { this(new ActivityFragmentLifecycle()); } @SuppressLint({"ValidFragment"}) public SupportRequestManagerFragment(ActivityFragmentLifecycle lifecycle) { this.requestManagerTreeNode = new SupportRequestManagerFragment.SupportFragmentRequestManagerTreeNode(); this.childRequestManagerFragments = new HashSet(); this.lifecycle = lifecycle; } ActivityFragmentLifecycle getLifecycle() { return this.lifecycle; } ... public void onStart() { super.onStart(); this.lifecycle.onStart(); } public void onStop() { super.onStop(); this.lifecycle.onStop(); } public void onDestroy() { super.onDestroy(); this.lifecycle.onDestroy(); } public void onLowMemory() { super.onLowMemory(); if (this.requestManager != null) { this.requestManager.onLowMemory(); } } }
注册RequestManager 到 Lifecycle
public class RequestManager implements LifecycleListener {
private final Context context;
private final Lifecycle lifecycle;
private final RequestManagerTreeNode treeNode;
private final RequestTracker requestTracker;
private final Glide glide;
private final RequestManager.OptionsApplier optionsApplier;
private RequestManager.DefaultOptions options;
public RequestManager(Context context, Lifecycle lifecycle, RequestManagerTreeNode treeNode) {
this(context, lifecycle, treeNode, new RequestTracker(), new ConnectivityMonitorFactory());
}
RequestManager(Context context, final Lifecycle lifecycle, RequestManagerTreeNode treeNode, RequestTracker requestTracker, ConnectivityMonitorFactory factory) {
this.context = context.getApplicationContext();
this.lifecycle = lifecycle;
this.treeNode = treeNode;
this.requestTracker = requestTracker;
this.glide = Glide.get(context);
this.optionsApplier = new RequestManager.OptionsApplier();
ConnectivityMonitor connectivityMonitor = factory.build(context, new RequestManager.RequestManagerConnectivityListener(requestTracker));
if (Util.isOnBackgroundThread()) {
(new Handler(Looper.getMainLooper())).post(new Runnable() {
public void run() {
//将当前对象注册在ActivityFragmentLifecycle 中
lifecycle.addListener(RequestManager.this);
}
});
} else {
lifecycle.addListener(this);
}
lifecycle.addListener(connectivityMonitor);
}
。。。
public void onStart() {
this.resumeRequests();
}
public void onStop() {
this.pauseRequests();
}
public void onDestroy() {
this.requestTracker.clearRequests();
}
class ActivityFragmentLifecycle implements Lifecycle {
private final Set<LifecycleListener> lifecycleListeners = Collections.newSetFromMap(new WeakHashMap());
private boolean isStarted;
private boolean isDestroyed;
ActivityFragmentLifecycle() {
}
public void addListener(LifecycleListener listener) {
this.lifecycleListeners.add(listener);
if (this.isDestroyed) {
listener.onDestroy();
} else if (this.isStarted) {
listener.onStart();
} else {
listener.onStop();
}
}
void onStart() {
this.isStarted = true;
Iterator i$ = Util.getSnapshot(this.lifecycleListeners).iterator();
while(i$.hasNext()) {
每个RequestManager对应一个LifecycleListener
LifecycleListener lifecycleListener = (LifecycleListener)i$.next();
lifecycleListener.onStart();
}
}
void onStop() {
this.isStarted = false;
Iterator i$ = Util.getSnapshot(this.lifecycleListeners).iterator();
while(i$.hasNext()) {
LifecycleListener lifecycleListener = (LifecycleListener)i$.next();
lifecycleListener.onStop();
}
}
void onDestroy() {
this.isDestroyed = true;
Iterator i$ = Util.getSnapshot(this.lifecycleListeners).iterator();
while(i$.hasNext()) {
LifecycleListener lifecycleListener = (LifecycleListener)i$.next();
lifecycleListener.onDestroy();
}
}
1万+

被折叠的 条评论
为什么被折叠?



