• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Glide生命周期管理

Glide生命周期管理

作者:lxj1137800599的专栏 字体:[增加 减小] 来源:互联网 时间:2017-08-23

lxj1137800599的专栏通过本文主要向大家介绍了glide,glide加载图片,glide是什么意思,glide框架,android glide等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
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就是用来进行生命周期管理的(不能写在子线程中,不然不会管理)

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Glide中request的调用和管理
  • Glide生命周期管理
  • 【RecyclerView与Glide】实现一个Android电子书阅读APP,gliderecyclerview
  • Glide的常用方法注释,Glide常用方法注释
  • Glide,glideandroid
  • android 图片加载库 Glide 的使用介绍,

相关文章

  • 2017-05-26Android中Window添加View的底层原理
  • 2017-05-26androidj基础:从网上下载图片,
  • 2017-05-26Android学习笔记之SoftReference软引用,弱引用WeakReference,weakreference
  • 2017-05-26Android 手机卫士1--实现splash页面,androidsplash
  • 2017-05-26订单流程view,订单view
  • 2017-05-26android studio 图片资源的放置位置,你中枪了吗?
  • 2017-05-26Android 开源库和项目 2,android开源库项目
  • 2017-05-26一个简单的Makefile编译框架
  • 2017-05-26Android群英传笔记系列二view的绘制(一),android群英
  • 2017-05-26Android中接收系统广播消息

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android入门,看这一本书就够了,android入门,
    • 数据分析与挖掘
    • 功能强大的StickyHeaderListView:标题渐变、吸附悬停、筛选分类、动态头部,
    • Unity编译时找不到AndroidSDK的问题 | Unable to list target platforms(转载),unityengine.ui找不到
    • Android之使用Bundle进行IPC,androidbundleipc
    • unity安卓读写目录,unity安卓读写
    • Accessibility辅助功能--一念天堂,一念地狱,一念天堂一念地狱
    • 看Facebook是如何优化React Native性能,facebookreact
    • ELK部署参考文档
    • 如何处理 android 方法总数超过 65536 . the number of method references in a .dex file exceed 64k,android.dex

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有