Android Glide 的简单使用(一)(上)

简介: 前言Gilde简介Android SDK 要求所需权限网络加载本地存储性能Glide基本用法简单使用

前言


微信图片_20220521210248.png

Android上图片加载的解决方案有多种,比较流行的有ImageLoader,Picasso,Fresco,Glide。


  • ImageLoader 是很早的图片加载框架,支持图片下载进度的监听,支持View滚动过程中暂停加载。支持多种缓存策略比如最大先删除,最少使用先删除等。


  • Picasso 简洁轻量,支持图片缓存使用的监控,支持优先级处理,支持延迟加载,自己不参与本地缓存而是交给 OkHttp 去实现。


  • Fresco 框架较大,使用比较繁琐,支持Gif图片,支持流式显示,类似于网页模糊渐进式显示图片,两个 内存 缓存和一个Native缓存构建三级缓存。


  • Glide 支持拉取,解码 和展示视频快照,图片,和GIF动画。支持优先级处理,与Activity和Fragment生命周期同步,图片默认是RGB_565,质量较差内存更小。功能更为丰富。


谷歌认可的是Glide,项目中用的最多的也是Glide。


微信图片_20220521210725.png


Gilde简介


       Glide 是一个快速高效的 Android 开源媒体管理和图像加载框架,它将媒体解码、内存和磁盘缓存以及资源池封装到一个简单易用的界面中。


       Glide 支持拉取,解码和展示视频快照,图片,和GIF动画。


       Glide的 Api 十分灵活,开发者甚至可以插入和替换成自己喜爱的任何网络栈。默认情况下,Glide使用的是一个定制化的基于HttpUrlConnection的栈,但同时也提供了与Google Volley和Square OkHttp快速集成的工具库。


       虽然Glide 的主要目标是让任何形式的图片列表的滚动尽可能地变得更快、更平滑,但实际上,Glide几乎能满足你对远程图片的拉取/缩放/显示的一切需求。


Android SDK 要求


      最低 SDK 版本- Glide 要求最低 SDK 版本为14(Ice Cream Sandwich)或更高版本。


      编译 SDK 版本- Glide 必须针对 SDK 版本27 (Oreo MR1) 或更高版本进行编译。


所需权限


网络加载


      通过网络连接加载图像,你应该将INTERNETACCESS_NETWORK_STATE权限添加到你的AndroidManifest.xml:


<manifest>
    ...
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <!--允许Glide监视连接状态,并在用户从断开连接到已连接网络的状态。-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  ...
</manifest>


本地存储


       要从DCIM或图片等本地文件夹加载图像,你需要添加READ_EXTERNAL_STORAGE权限:


<manifest>
    ...
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  ...
</manifest>


要将 Glide 的缓存存储在公共 sdcard 上,您需要使用 WRITE_EXTERNAL_STORAGE权限:


<manifest>
    ...
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  ...
</manifest>


性能


Glide 充分考虑了Android图片加载性能的两个关键方面:


  • 1.图片解码速度


  • 2.解码图片带来的资源压力


       为了让用户拥有良好的App使用体验,图片不仅要快速加载,而且还不能因为过多的主线程I/O或频繁的垃圾回收导致页面的闪烁和抖动现象。


Glide使用了多个步骤来确保在Android上加载图片尽可能的快速和平滑:


  • 自动、智能地下采样(downsampling)和缓存(caching),以最小化存储开销和解码次数;


  • 积极的资源重用,例如字节数组和Bitmap,以最小化昂贵的垃圾回收和堆碎片影响;


  • 深度的生命周期集成,以确保仅优先处理活跃的Fragment和Activity的请求,并有利于应用在必要时释放资源以避免在后台时被杀掉。


Glide基本用法


微信图片_20220521211230.png


  • with 传入的可以是当前上下文的对象。


  • load 加载图片,图片可以是本地图片,应用资源的图片也可以是一张网络图片。


  • placeholder 占位符是在请求正在进行时,显示的图片。


  • error 当请求永久失败时,会显示设置图片。


  • into 传入要展示图片的控件。


  • transform 用来完成剪裁(切圆)或对位图应用过滤器,但它也可以用于转换GIF动画,甚至自定义的资源类型。


简单使用


       在build.gradle中添加依赖

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

   

  加载图片


        Uri uri = Uri.parse("https://profile.csdnimg.cn/C/A/6/1_g984160547");
//        String uri = "https://profile.csdnimg.cn/C/A/6/1_g984160547";
        //上面两种写法效果相同
        Glide.with(this).load(uri).into(agb.ivInitial);
        //应用资源
        Glide.with(this).load(R.mipmap.sc1).into(agb.ivAppMipmap);
        //画圆
        Glide.with(this).load(uri).circleCrop().into(agb.ivCirclecrop);
        //增加占位符和加载失败显示图片
        Glide.with(this).load(uri).
                placeholder(R.mipmap.sc1)
                .error(R.mipmap.sc2)
                .into(agb.ivInitial);
        FutureTarget<Bitmap> target= Glide.with(this)
                .asBitmap()
                .load(uri)
                .submit();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Bitmap bitmap = target.get();//同步请求
                    //子线程切主线程更新UI
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            agb.ivOptions.setImageBitmap(bitmap);
                        }
                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();


取消加载


Glide.with(this).clear(agb.ivCirclecrop);


注意: 尽管及时取消不必要的加载是很好的实践,但这并不是必须的操作。实际上,当 Glide.with() 中传入的 Activity 或 Fragment 实例销毁时,Glide 会自动取消加载并回收资源。


相关文章
|
数据处理 Android开发
关于安卓glide加载显示进度
安卓glide加载显示进度
419 0
|
4月前
|
Java Android开发
Android面试题经典之Glide取消加载以及线程池优化
Glide通过生命周期管理在`onStop`时暂停请求,`onDestroy`时取消请求,减少资源浪费。在`EngineJob`和`DecodeJob`中使用`cancel`方法标记任务并中断数据获取。当网络请求被取消时,`HttpUrlFetcher`的`cancel`方法设置标志,之后的数据获取会返回`null`,中断加载流程。Glide还使用定制的线程池,如AnimationExecutor、diskCacheExecutor、sourceExecutor和newUnlimitedSourceExecutor,其中某些禁止网络访问,并根据CPU核心数动态调整线程数。
124 2
|
3月前
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
31 0
|
4月前
|
缓存 编解码 安全
Android经典面试题之Glide的缓存大揭秘
Glide缓存机制包括内存和硬盘缓存。内存缓存使用弱引用的ActiveResources和LRU策略,硬盘缓存利用DiskLruCache。Engine.load方法首先尝试从内存和弱引用池加载,然后从LRU缓存中加载图片,增加引用计数并移出LRU。若缓存未命中,启动新任务或加入现有任务。内存大小根据设备内存动态计算,限制在0.4以下。DiskLruCache使用自定义读写锁,保证并发安全,写操作通过锁池管理,确保高效。
100 0
|
6月前
|
Android开发
Android中Glide加载Https图片失败的解决方案
Android中Glide加载Https图片失败的解决方案
401 1
|
6月前
|
Android开发
Android实现圆形图像的两种方法(Glide和Picasso)
Android实现圆形图像的两种方法(Glide和Picasso)
316 1
|
6月前
|
API Android开发
[Android]图片加载库Glide
[Android]图片加载库Glide
99 0
|
6月前
|
XML 缓存 Java
Android App开发之利用Glide实现图片的三级缓存Cache讲解及实战(附源码 超详细必看 简单易懂)
Android App开发之利用Glide实现图片的三级缓存Cache讲解及实战(附源码 超详细必看 简单易懂)
306 0
|
6月前
|
XML Java Android开发
Android App开发中使用Glide加载网络图片讲解及实战(附源码 简单易懂)
Android App开发中使用Glide加载网络图片讲解及实战(附源码 简单易懂)
305 0
|
6月前
|
XML Java Android开发
Android Studio App开发之利用图片加载框架Glide实现刷新验证码功能(附源码 简单易懂)
Android Studio App开发之利用图片加载框架Glide实现刷新验证码功能(附源码 简单易懂)
61 0