Glide生命周期管理

Glide.with里面有这段代码

public RequestManager get(Activity activity) {
        if (Util.isOnBackgroundThread()) {
            return get(activity.getApplicationContext());
        } else {
            assertNotDestroyed(activity);
            android.app.FragmentManager fm = activity.getFragmentManager();
            return fragmentGet(activity, fm, null /*parentHint*/);
        }
    }
    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) {
                return get(((ContextWrapper) context).getBaseContext());
            }
        }

        return getApplicationManager(context);
    }

如果是子线程

private RequestManager getApplicationManager(Context context) {
        ......
        applicationManager = factory.build(glide, new ApplicationLifecycle(), new EmptyRequestManagerTreeNode());//------主要这句
        ......

        return applicationManager;
    }

ApplicationLifecycle里面就调用了onStart方法,也就是子线程无法进行生命周期管理

class ApplicationLifecycle implements Lifecycle {
  @Override
  public void addListener(LifecycleListener listener) {
    listener.onStart();
  }

  @Override
  public void removeListener(LifecycleListener listener) {
    // Do nothing.
  }
}

然后再看,是主线程的情况

private RequestManager fragmentGet(Context context, android.app.FragmentManager fm,
                                       android.app.Fragment parentHint) {
        RequestManagerFragment current = getRequestManagerFragment(fm, parentHint);
        RequestManager requestManager = current.getRequestManager();
        if (requestManager == null) {
            Glide glide = Glide.get(context);
            requestManager =
                    factory.build(glide, current.getLifecycle(), current.getRequestManagerTreeNode());
            current.setRequestManager(requestManager);
        }
        return requestManager;
    }

getRequestManagerFragment会自动生成空白fragment,里面有ActivityFragmentLifecycle 这是ActivityFragmentLifecycle种的部分实现

  @Override
  public void addListener(LifecycleListener listener) {
    lifecycleListeners.add(listener);

    if (isDestroyed) {
      listener.onDestroy();
    } else if (isStarted) {
      listener.onStart();
    } else {
      listener.onStop();
    }
  }

那又是如何调用的呢? 就在fragmentGet函数里面的factory.build里面。这是个借口,具体实现就是new RequestManager。里面有这样一段代码

if (Util.isOnBackgroundThread()) {
            mainHandler.post(addSelfToLifecycle);
        } else {
            lifecycle.addListener(this);//这样就算是这是开启生命周期管理
        }

总结:其实with就是用来进行生命周期管理的(不能写在子线程中,不然不会管理)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏俞其荣的博客

Android Architecture Component之Lifecycle解析HeaderLifecyclePart 1Part 2Part 3Footer

终于到了最后的关头,Android Architecture Component 系列的最后一节内容。今天给大家带来的就是 Lifecycle 的解析。

1704
来自专栏程序员宝库

Android屏幕截图,View截图(干货)

831
来自专栏王磊的博客

react-native绑定优酷SDK-附效果图和源码

ReactNative绑定优酷SDK需要用到两部分知识: 优酷本身的sdk绑定; RN与原生界面的交互; 效果: ? RN版本:0.49.3 代码更新日期:20...

3946
来自专栏向治洪

android进程 清理及activity栈管理

MainActivity如下: package come.on;   import android.app.Activity;   import andro...

26310
来自专栏木头编程 - moTzxx

androidannotions开发框架在Eclipse中的配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

1652
来自专栏Android 开发学习

Android Architecture Components 之LiveData, ViewModel

3034
来自专栏曾大稳的博客

Glide v3.7源码分析(1)-----Glide.with()

1711
来自专栏码匠的流水账

聊聊spring cloud gateway的RedirectToGatewayFilter

本文主要研究下spring cloud gateway的RedirectToGatewayFilter

1691
来自专栏向治洪

listview的工作原理

/**      * Unsorted views that can be used by the adapter as a convert vi...

22310
来自专栏Android中高级开发

Android开发之漫漫长途 XV——RecyclerView

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索...

1852

扫码关注云+社区

领取腾讯云代金券