Glide(2):生命周期绑定

Glide通过RequestManager与Activity或Fragment绑定,感知生命周期变化,智能管理图片加载请求,避免内存泄漏,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RequestManager实现了LifecycleListener接口,来感知生命周期,实现intelligently “智能”管理请求。

1. Glide.with(…)

有若干多态方法,以下面方法举例。
Glide.with(activity)

  public static RequestManager with(@NonNull Activity activity) {
    return getRetriever(activity).get(activity);
  }

RequestManagerRetriever#get(activity)

  public RequestManager get(@NonNull Activity activity) {
  	// 子线程调用
    if (Util.isOnBackgroundThread()) {
      return get(activity.getApplicationContext());
    } else {
      // 主线程调用
      assertNotDestroyed(activity);
      android.app.FragmentManager fm = activity.getFragmentManager();
      return fragmentGet(activity, fm, /*parentHint=*/ null, isActivityVisible(activity));
    }
  }
  1. 子线程中调用with,则Glide图片加载到生命周期与Application绑定;
  2. 否则,图片加载到生命周期与Activity/Fragment绑定。

2. fragmentGet(…)

  private RequestManager fragmentGet(
      @NonNull Context context,
      @NonNull android.app.FragmentManager fm,
      @Nullable android.app.Fragment parentHint,
      boolean isParentVisible) {
    // 绑定一个无界面到Fragment
    RequestManagerFragment current = getRequestManagerFragment(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;
  }
public class RequestManagerFragment extends Fragment {
  private static final String TAG = "RMFragment";
  private final ActivityFragmentLifecycle lifecycle;

  ...
  @Override
  public void onStart() {
    super.onStart();
    lifecycle.onStart();
  }

  @Override
  public void onStop() {
    super.onStop();
    lifecycle.onStop();
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
    lifecycle.onDestroy();
    unregisterFragmentWithRoot();
  }
}

这里举例用Glide.with(activity)举例:
Glide内部会与一个无界面的Fragment进行绑定,这样RequestManager可以感知Fragment的生命周期,可以有效管理请求。
用户无需关系此细节,降低使用成本,防止内存泄漏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值