Android Coil对比Glide深入分析探究

目录
  • Coil概述
  • Glide概述
  • Glide VS Coil
  • 对于小图片
  • 对于大图片
  • 总结

Coil概述

Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库。

与传统的图片加载库Glide,Picasso或Fresco等相比。该具有轻量(只有大约1500个方法)、快、易于使用、更现代的API等优势。

它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角。并且是全用Kotlin编写,如果你是纯Kotlin项目的话,那么这个库应该是你的首选。

这应该是一个很新的一个图片加载库,完全使用kotlin编写,使用了kotlin的协程,图片网络请求方式默认为Okhttp,相比较于我们常用的Picasso,Glide或者Fresco,它有以下几个特点:

  • 足够快速,它在内存、图片存储、图片的采样、Bitmap重用、暂停\取消下载等细节方面都有很大的优化(相比于上面讲的三大框架);
  • 足够轻量,只有大概1500个核心方法,当然也是相对于PGF而言的;
  • 足够新,也足够现代!使用了最新的Koltin协程所编写,充分发挥了CPU的性能,同时也使用了OKHttp、Okio、LifeCycle等比较新式的Android库。

Glide概述

首先先说一下Glide跟其他框架相比优势在哪里?

1:生命周期的管理 2:支持gif picasso也支持gif 3:三级缓存,内存缓存中还分为活动缓存和内存缓存;活动缓存指得是讲正在使用得图片用弱引用缓存,使用完成后到内存缓存;再到磁盘缓存; 4:占用内存小,它默认得编码格式是rgb565; picasso用得argb8888 ImageLoader不支持gif图片加载 而且也很老了

Glide VS Coil

当前是基于Glide和Coil最新版本来分析的:

对于Coil:

implementation("io.coil-kt:coil:1.4.0")

对于Glide:

implementation 'com.github.bumptech.glide:glide:4.12.0'

代码加载图片,并计算加载时间:

对于Glide:

fun ImageView.loadImage(url:String, context: Context, position : Int) {
    val t = System.currentTimeMills()
  Glide.
    with(context).
    load(url).
    placeholder(R.drawable.ic_launcher_background).into(
        object: CustomTarget<Drawable>() {
            override fun onLoadCleard(placeholder : Drawable?) {}

            override fun onResourceReady(reosurce:Drawable, transition : Transition<in Drawable>?) {
                this@loadImage.setImageResource(resource)
                Log.d("LoadImage", "$position ---> ${System.currentTimeMills() - t }")
          }
      }
    )
}

对于Coil:

private fun ImageView.loadImage(url:String, position:Int) {
  val t = System.currentTimeMillis()
  this.load(url) {
        target { drawable ->
          this@loadImage.setImageDrawable(drawable)
            Log.d("LoadImage", "$position --> ${System.currentTimeMillis() - t}")
      }
  }
}

下面的图标中将会告诉你在RecyclerView中加载图片所花费的时间:

为了测试的精确性,我们将app运行了5次,然后取平均值:

这些测试是在4G网的设备上。

这里有两组测试分别是小图片和大图片:

对于小图片

第一次加载的所花时间为:

对于大图片

第一次加载的所花时间为:

对于这些结果,就目前而言,Glide 的加载速度会快于Coil,但是如果你在你的项目中使用了Jetpack,Kotlin Coroutines和OkHttp,那么Coil将会更加适合你。

总结

Glide是一个Android平台的快速高效开源的图片加载框架,现在有很多人在使用它。然而Coil作为一个新的图片加载库在近些日子也越来越受欢迎。两个库的基本功能是相同的;它们都是使用BitmapFactory来解析数据,然后使用相同的Android SDK来从文件中读取数据。

那么为什么Coil的欢迎程度加深了,Coil和Glide又有何不同呢?

Coil Glide
生命周期监控 直接使用LifeCycle 通过注入一个无界面的Fragment来回调LifeCycle
线程帧 通过协程来完成后台任务和线程切换 通过线程池来完成后台任务

到此这篇关于Android Coil对比Glide深入分析探究的文章就介绍到这了,更多相关Android Coil对比Glide内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android图片加载框架Coil的详细使用总结

    目录 简介 简单使用 高斯模糊 圆角 圆形 灰色变换 GrayscaleTransformation Gif 监听下载过程 取消下载 替换 okhttp 实例 自定义 Coil 源码分析 总结 简介 Coil 是一个 Android 图片加载库,通过 Kotlin 协程的方式加载图片.特点如下: 更快: Coil 在性能上有很多优化,包括内存缓存和磁盘缓存,把缩略图存保存在内存中,循环利用 bitmap,自动暂停和取消图片网络请求等. 更轻量级: Coil 只有2000个方法(前提是你的 APP

  • Android入门之Glide显示网络图片高版本的使用详解

    目录 开篇 项目整体情况 Nginx中hosting物理小图片存储目录 Nginx配置 Glide组件使用 gradle文件中的依赖 MyAppGlideModule.java 开篇 一旦我们进入了MVVM,那么MVVM一发不可收拾了.有了MVVM,我们再也不用漫天遍野的去look layout里的UI组件id了,想用时直接dataBinding.layout驼峰命名,即可到处使用这个组件了. 我们之前的Glide为了演示,显示的是本地图片用法.它从@mipmap里得到一个image的id,是一

  • Android Glide常见使用方式讲解

    目录 效果图 依赖 普通显示 占位符显示 圆角显示 高斯模糊显示 生命周期 图床工具推荐 效果图 依赖 implementation 'com.github.bumptech.glide:glide:4.13.0'    annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'    implementation 'jp.wasabeef:glide-transformations:4.1.0' 普通显示 没有任何附加效果显示

  • Android图片加载库Glide用法

    目录 Glide介绍 Android SDK 要求 使用前的准备 基本用法 在 ListView 和 RecyclerView 中的使用 占位符 选项 过渡动画 变换效果 使用示例 Glide介绍 Glide是一个快速高效的Android图片加载库,注重于平滑的滚动.Glide提供了易用的API,高性能.可扩展的图片解码管道,以及自动的资源池技术.Glide 的主要目标是让任何形式的图片列表的滚动尽可能地变得更快.更平滑. Android SDK 要求 Min Sdk Version - 使用

  • Android 官推 kotlin-first 的图片加载库——Coil的使用入门

    Coil 是一个非常年轻的图片加载库,在 2020 年 10 月 22 日才发布了 1.0.0 版本,但却受到了 Android 官方的推广,在 Android Developers Backstage 这个博客中专门聊过一期.推广的原因比较简单:一方面是这个库确实做得很好,另一方面是这个库完全是用 Kotlin 写的,而且运用了大量 Kotlin 的特性,尤其是协程.所以 Google 嘴上说着不会放弃 Java,但实际上咱们都懂的. Coil 名字的由来:取 Coroutine Image

  • 详解Android GLide图片加载常用几种方法

    目录 缓存浅析 GLide图片加载方法 图片加载周期 图片格式(Bitmap,Gif) 缓存 集成网络框架 权限 占位符 淡入效果 变换 启动页/广告页 banner 固定宽高 圆角 圆形 总结 缓存浅析 为啥要做缓存? android默认给每个应用只分配16M的内存,所以如果加载过多的图片,为了 防止内存溢出 ,应该将图片缓存起来. 图片的三级缓存分别是: 1.内存缓存 2.本地缓存 3.网络缓存 其中,内存缓存应优先加载,它速度最快:本地缓存次优先加载,它速度也快:网络缓存不应该优先加载,它

  • Android图片框架Glide原理深入探索

    目录 with load into 原理总结 缓存 LruCache 首先引入依赖 implementation 'com.github.bumptech.glide:glide:4.12.0'    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' 下面一行代码,就是Glide最简单的使用方式了 Glide.with(this).load(url).into(imageView) with 首先,我们来看with,其

  • Android中如何使用Glide加载图像

    在进入 Glide 示例之前,我们应该知道什么是 glide,Glide 是 muyangmin 开发的一个图像处理库.使用 glide 库,我们可以显示图像.解码图像.缓存图像.动画 gif 等等. 这个例子演示了如何在 android 中集成 glide. 第 1 步- 在 Android Studio 中创建一个新项目,转到 File ⇒ New Project 并填写所有必需的详细信息以创建一个新项目. 第 2 步- 在 build.gradle(Module:app)中添加以下代码.

  • Android Coil对比Glide深入分析探究

    目录 Coil概述 Glide概述 Glide VS Coil 对于小图片 对于大图片 总结 Coil概述 Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库. 与传统的图片加载库Glide,Picasso或Fresco等相比.该具有轻量(只有大约1500个方法).快.易于使用.更现代的API等优势. 它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角.并且是全用Kotlin编写,如果你是纯Kot

  • Android如何使用Glide加载清晰长图

    最近项目中使用的是Glide加载图片,上线后用户反馈图片模糊,经过测试后发现是用户点击超长图放大的时候,图片变的模糊看不起,这很影响用户的体验,要解决这个问题,我们需要先充分的了解Glide的使用. Glide概述 使用习惯Glide3的朋友总会觉得Glide 4相对于Glide 3改动非常大,其实不然.之所以大家会有这种错觉,是因为你将Glide 3的用法直接搬到Glide 4中去使用,结果IDE全面报错,然后大家可能就觉得Glide 4的用法完全变掉了. 其实Glide 4相对于Glide

  • Android Handler源码深入探究

    1.android 消息循环有4个重要的类Handler.Message.Looper.MessageQueue handler 用来发送.处理消息. Message 是消息的载体. MessageQueue 是一个消息队列,既然是队列,就有入队.出队的处理. Looper 创建一个消息循环.不断的从MessageQueue中读取消息.并分发给相应的Handler进行处理. 2.我们都知道main函数是Java程序的入口,android程序也不例外. android App的唯一入口就是Acti

  • Android DataBinding单向数据绑定深入探究

    目录 一.数据绑定流程 二.建立观察者模式绑定关系 在前面DataBinding原理----布局的加载这篇文章中,我们说明了DataBinding中布局的加载过程,这里继续下一步,数据是如何进行绑定的,这里只介绍单向数据绑定,即数据的变化会反映到控件上:后面再介绍双向数据绑定. 在分析源码之前,在心里要有一个概念就是这里的数据绑定是基于观察者模式来实现的,所以在阅读这部分源码的时候要着重分清楚,谁是观察者谁是被观察者,把这个思想放在心理,这样就能抓住代码的本质. 这一篇分为两个小部分,首先是数据

  • Android Activity状态与操作探究

    目录 知晓当前是在哪一个Activiy 随时随地退出程序 启动Activity的最佳写法 知晓当前是在哪一个Activiy 创建一个BaseActivity类,继承AppCompatActivity类.重写onCreate方法 open class BaseActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

  • Android 中的注解深入探究

    本文系GDG Android Meetup分享内容总结文章 注解是我们经常接触的技术,Java有注解,Android也有注解,本文将试图介绍Android中的注解,以及ButterKnife和Otto这些基于注解的库的一些工作原理. 归纳而言,Android中的注解大概有以下好处 提高我们的开发效率 更早的发现程序的问题或者错误 更好的增加代码的描述能力 更加利于我们的一些规范约束 提供解决问题的更优解 准备工作 默认情况下,Android中的注解包并没有包括在framework中,它独立成一个

  • Android中pendingIntent与Intent的深入分析

    Android中pendingIntent的深入分析 pendingIntent字面意义:等待的,未决定的Intent. 要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, int),getBroadcast(Context, int, Intent, int),getService(Context, int, Intent, int)  分别对应着Intent的3个行为,跳转到一个activity组件.打开一个广播

  • Android框架学习之Volley和Glide详解

    前言 大家在看到这个题目的同时,你们估计会想,Volley与Glide怎么拿来一块说呢,他们虽然不是一个框架,但有着相同功能,那就是图片处理方面.首先我们先来看一下什么volley,又什么是glide. Volley是Google官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持OkHttp,Volley里面也封装了ImageLoader,自身作为图片加载框架,不过这块功能没有一些专门的图片加载框架强大,对于简单的需求可以使用,对于稍复杂点的需求还是需要用到专门的图片加载框架.Voll

随机推荐