Android RecyleView 使用 Gilde 加载图片引发的卡顿问题

news2024/11/15 11:16:30

Glide 是一个用于 Android 的图片加载和缓存库。它可以帮助开发者快速、高效地加载网络图片、本地文件和视频帧,并且能够自动缓存图片数据,减少网络请求。Glide 具有良好的性能和易用的 API,支持常见的图片加载需求,例如图片压缩、裁剪和动画等功能。

尽管 Glide 是一个非常优秀的图片加载框架,但是在 RecyleView 上使用 Glide 加载图片还需注意性能问题


在实际的项目中发现 RecyleView 在频繁大幅度的上下滑动时(短时间内使用 Glide 加载了大量的图片)出现了比较明显的卡顿,使用 Profile 查看:

好家伙,内存直接暴涨,虽然 Native 内存上涨并不会直接引发 OOM,但还是会影响应用的稳定性的(比如卡顿),甚至会间接引发 ANR 或 OOM

经研究发现 Glide 在加载图片的过程中,item 被回收后并不会停止加载,而是等待图片加载完成,那怪不得内存上涨成这样,也有可能是手机性能不好加载速度太慢了?


换个性能好的手机试试,还是用 Profile 查看:

 从主观体验上还是会有一些卡顿,从 Profile 上也证实了这一点,因为尽管手机的性能很好,加载图片的速度很快,但会触发大量的 GC(内存抖动),也是会引发卡顿,有 ANR 或 OOM 的风险。

为了解决这个卡顿问题,需要对 RecyleView 在滑动时的加载图片做一些收敛


Glide 也有提供了对应的方法来让我们优化加载图片的过程:

暂停加载图片:Glide.with(context).pauseRequests()

恢复加载图片:Glide.with(context).resumeRequests()

接下来在 RecyleView 的滑动回调中调用即可:

    recycleView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
        override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
            when(newState) {
                RecyclerView.SCROLL_STATE_DRAGGING -> { // 拖动时
                    Glide.with(context).pauseRequests()
                }
                RecyclerView.SCROLL_STATE_SETTLING -> { // 惯性滑动时

                }
                RecyclerView.SCROLL_STATE_IDLE -> { // 静止时
                    Glide.with(context).resumeRequests()
                }
            }
        }
    })

可以根据自己的业务需求和用户体验自行调整

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1364703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot 房屋租赁系统

spring boot mysql mybatis 前台后端

JavaWeb——后端之maven

三、后端Web开发 1. Maven 1.1 概念 概念: 一款用于管理和构建java项目的工具,是apache下的一个开源项目 作用: 依赖管理:jar包,避免版本冲突问题——不用手动导jar包,只需要在配置文件(pom…

项目管理工具Maven

Maven Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. Maven基础内容 2. Maven的依赖管…

使用jasypt进行配置文件加密

1、导入依赖 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency> 可能出现的问题 &#xff1a; 依赖不要从pdf中直…

Unity 0GC或者最大限度降低GC方案

文章目录 GC带来的问题性能瓶颈玩家体验受损 优化关键点1. **对象池技术**&#xff1a;2. **内存管理优化**&#xff1a;3. **UGUI优化**&#xff1a;4. **ECS架构下的优化**&#xff1a;5. **资源管理**&#xff1a;6. **自定义数据结构与算法**&#xff1a;7. **开启增量GC&a…

分布式事务理论及Seata实践

分布式事务简介 事务是指作为单个逻辑工作单元执行的一系列操作&#xff0c;要么完全地执行&#xff0c;要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成&#xff0c;否则不会永久更新面向数据的资源。事务的四个特征&#xff08;ACID&#xff09; …

算法第十三天-组合总和Ⅱ

组合总和Ⅱ 题目要求 解题思路 按顺序搜索&#xff0c;设置合理的变量&#xff0c;在搜索的过程中判断是否会出现重复集结果。重点理解对输入数组排序的作用和参考代码中 大剪枝和小剪枝 的意思 这道题域上一问的区别在于&#xff1a; 第39题&#xff1a;candidates中的数字…

构建异地企业网络互联的高效路径

在当今数字化浪潮中&#xff0c;企业的业务拓展已不再受限于地理位置。为了在全球竞争中立于不败之地&#xff0c;越来越多的企业选择在不同城市设立分支机构&#xff0c;构建异地网络&#xff0c;实现高效的协同办公。本文将深入探讨在北上广等经济发达地区&#xff0c;如何通…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第二天-Linux开发板外设开发(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

PLC水箱液位控制、神经网络、PID模糊控制等Factory IO仿真

水箱液位控制的PLC仿真程序。TIA Portal V17 中的代码。该水箱在 Factory IO 3D 仿真软件中建模&#xff0c;将控制算法写入PLC&#xff0c;与Factory IO联合仿真进行实验。项目包括一个简单的自动化系统、一个带有两个泵的液罐和一个液位传感器。从 HMI 中&#xff0c;我们可以…

2024阿里云优惠_阿里云活动中心

2024年阿里云优惠活动大全&#xff0c;包括阿里云服务器优惠活动清单、配置价格表、域名优惠活动、阿里云建站活动、阿里云优惠代金券免费领取、对象存储OSS活动、企业邮箱优惠、无影云电脑优惠、CDN特惠等等&#xff0c;阿里云百科aliyunbaike.com分享2024阿里云优惠活动大全_…

Docker给容器添加新端口映射

Docker容器添加新端口映射 查看运行的容器 docker ps查看容器挂载目录 docker inspect [容器id]我这里是[容器name] 停止容器 docker stop pythonWarning: Stopping docker.service, but it can still be activated by: docker.socket 停止docker服务 systemctl stop dock…

el-table魔改样式出现BUG,表格内容区域出现滚动条

问题&#xff1a;el-table表格内容区域在高度自适应的情况下冒出滚动条 解决办法&#xff1a; 代码排查后发现时我设置了fixed:“xxx” 属性就会导致滚动条出现的问题&#xff0c;不设置则无。 [{ type: index, label: 序号, fixed: left },{ prop: enterprisesName, label: …

数据库的连接

连接数据库 我们使用WinR输入cmd打开运行窗口 输入:sqlplus并回车 输入用户名和密码,我用的是Scott,密码我自己设置的123456,Scott默认的密码是tiger,回车 这种情况表示登录成功 在连接Scott成功的情况下创建一些数据,在我的资源里面有个Oracle数据基础可以下载,直接复制粘…

09.简单工厂模式与工厂方法模式

道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物。——《道德经》 最近小米新车亮相的消息可以说引起了不小的轰动&#xff0c;我们在感慨SU7充满土豪气息的保时捷设计的同时&#xff0c;也深深的被本土品牌的野心和干劲所鼓舞。 今天我们就接着这个背景&…

Debezium发布历史49

原文地址&#xff1a; https://debezium.io/blog/2019/02/19/reliable-microservices-data-exchange-with-the-outbox-pattern/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 使用发件箱模式进行可靠的微服务数…

JSP内置对象:forward动作标记和sendRedirect()方法实现页面跳转的区别

1.forward为服务器跳转&#xff0c;浏览器的地址栏不变&#xff1b; sendRedirect&#xff08;&#xff09;为客户端跳转&#xff0c;浏览器的地址栏改变变新页面的URL。 2.执行到forward标记出现处停止当前JSP页面的继续执行&#xff0c;而转向标记中的page属性指定的页面&am…

【Matplotlib】基础设置之图像处理05

图像基础 导入相应的包&#xff1a; import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np %matplotlib inline导入图像 我们首先导入上面的图像&#xff0c;注意 matplotlib 默认只支持 PNG 格式的图像&#xff0c;我们可以使用 mpimg.im…

一文搞定JVM内存模型

鲁大猿&#xff0c;寻精品资料&#xff0c;帮你构建Java全栈知识体系 www.jiagoujishu.cn 运行时数据区 内存是非常重要的系统资源&#xff0c;是硬盘和 CPU 的中间仓库及桥梁&#xff0c;承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、…

56K star!一键拥有跨平台 ChatGPT 应用:ChatGPT-Next-Web

前言 现在围绕 openai 的客户端层出不穷&#xff0c;各路开发大神可以说是各出绝招&#xff0c;我也试用过几个国内外的不同客户端。 今天我们推荐的开源项目是目前我用过最好的ChatGPT应用&#xff0c;在GitHub超过56K Star的开源项目&#xff1a;ChatGPT-Next-Web。 ChatGP…