自己做网站可以随便起名字吗常州外贸网站建设
Glide: Glide 是一个强大的 Android 图片加载库,它能够自动管理图片加载请求与 Android 组件的生命周期绑定,防止内存泄漏和无效加载。
Glide 初始化绑定
// 支持的上下文类型
Glide.with(Activity)
Glide.with(Fragment)
Glide.with(FragmentActivity)
Glide.with(Context)
Glide.with(View)
Glide生命周期绑定流程
Glide.with(this): 下面都是它的重载方法,Context,Activity,FragmentActivity, Fragment, android.app.Fragment fragment,View都可以作为他的参数(如上图代码块),内容大同小异,都是先getRetriever,然后再get(Context)
@NonNull
public static RequestManager with(@NonNull Context context) {return getRetriever(context).get(context);
}@NonNull
public static RequestManager with(@NonNull Activity activity) {return getRetriever(activity).get(activity);
}@NonNull
public static RequestManager with(@NonNull FragmentActivity activity) {return getRetriever(activity).get(activity);
}@NonNull
public static RequestManager with(@NonNull Fragment fragment) {return getRetriever(fragment.getContext()).get(fragment);
}@NonNull
public static RequestManager with(@NonNull View view) {return getRetriever(view.getContext()).get(view);
}
获取生命周期所有者:
-
Glide 使用
RequestManagerRetriever
获取或创建对应的RequestManager
-
对于 Activity/Fragment的Context,Glide 会添加一个空白/隐藏的
SupportRequestManagerFragment
用来监听生命周期
@NonNull
public RequestManager get(@NonNull FragmentActivity activity) {if (Util.isOnBackgroundThread()) {return get(activity.getApplicationContext());} else {assertNotDestroyed(activity);FragmentManager fm = activity.getSupportFragmentManager();return supportFragmentGet(activity, fm, /*parentHint=*/ null, isActivityVisible(activity));}
}@NonNull
private RequestManager supportFragmentGet(@NonNull Context context,@NonNull FragmentManager fm,@Nullable Fragment parentHint,boolean isParentVisible) {SupportRequestManagerFragment current =getSupportRequestManagerFragment(fm, parentHint, isParentVisible);RequestManager requestManager = current.getRequestManager();if (requestManager == null) {// TODO(b/27524013): Factor out this Glide.get() call.Glide glide = Glide.get(context);requestManager =factory.build(glide, current.getGlideLifecycle(), current.getRequestManagerTreeNode(), context);current.setRequestManager(requestManager);}return requestManager;
}@NonNull
private SupportRequestManagerFragment getSupportRequestManagerFragment(@NonNull final FragmentManager fm, @Nullable Fragment parentHint, boolean isParentVisible) {SupportRequestManagerFragment current =(SupportRequestManagerFragment) fm.findFragmentByTag(FRAGMENT_TAG);if (current == null) {current = pendingSupportRequestManagerFragments.get(fm);if (current == null) {current = new SupportRequestManagerFragment();current.setParentFragmentHint(parentHint);if (isParentVisible) {current.getGlideLifecycle().onStart();}pendingSupportRequestManagerFragments.put(fm, current);fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss();handler.obtainMessage(ID_REMOVE_SUPPORT_FRAGMENT_MANAGER, fm).sendToTarget();}}return current;
}
创建生命周期监听器:
-
Glide 创建一个
ActivityFragmentLifecycle
实例 -
这个监听器会跟踪 Activity/Fragment 的生命周期状态
SupportRequestManagerFragment.javapublic SupportRequestManagerFragment() {this(new ActivityFragmentLifecycle());
}@VisibleForTesting
@SuppressLint("ValidFragment")
public SupportRequestManagerFragment(@NonNull ActivityFragmentLifecycle lifecycle) {this.lifecycle = lifecycle;
}
绑定生命周期事件
-
当宿主 (Activity/Fragment) 的生命周期发生变化时,会回调到
LifecycleListener
-
Glide 的
RequestManager
实现了LifecycleListener
接口
@Overridepublic void onDetach() {super.onDetach();parentFragmentHint = null;unregisterFragmentWithRoot();}@Overridepublic void onStart() {super.onStart();lifecycle.onStart();}@Overridepublic void onStop() {super.onStop();lifecycle.onStop();}@Overridepublic void onDestroy() {super.onDestroy();lifecycle.onDestroy();unregisterFragmentWithRoot();}