【Android】画面卡顿优化列表流畅度六(终篇)

2023-11-21 01:30

本文主要是介绍【Android】画面卡顿优化列表流畅度六(终篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇:
【Android】画面卡顿优化列表流畅度五之下拉刷新上拉加载更多组件RefreshLayout修改

场景回顾:

业务经过一年半左右的运行后,出现了明显的列表卡顿情况;于是开始着手进行列表卡顿优化。目前的情况是:

  1. 网络图片渲染耗时大
  2. 上下滑动反应慢,甚至画面不动
  3. 新增一页数据加载渲染时耗时比较大,上下滑动几乎没有反应,画面停止没有交互响应
    交互体验基本摆烂了

计划的优化方向:

  • 列表组件RecyclerView刷新机制由notifyDataSetChanged()优化为notifyItemRangeInserted(),后期有必要也会使用notifyItemRangeRemoved、notifyItemRangeChanged、notifyItemMoved等等方式更新刷新数据
  • Glide图片加载库优化参数设置:缩略图thumbnail(0~1.0f)、RequestOptions里sizeMultiplier、override、dontAnimate、noTransformation()等
  • 内存优化设置clearMemory() 磁盘清理设置clearDiskCache()
  • RefreshLayout下拉刷新上拉加载更多组件;因为布局嵌套等原因这个组件和NestedScrollView不兼容;另外这个组件里的上拉加载更多的逻辑居然是有bug的,而且是对画面顿感很致命的逻辑漏洞。查了好久才发现的。吐血一升表示无语中
  • 分页加载由于历史原因并不能统一返回10条,而是有可能大于20条这样的情况存在,再吐一升;非常无语,本来图片就够重了,现在发现某些页数据数量也很重。

最终的优化方案如下:

RecyclerView刷新机制notifyItemRangeInserted已做说明这里不累赘了

https://lichong951.blog.csdn.net/article/details/134331699

Glide加载图片参数值设置也已说明

https://lichong951.blog.csdn.net/article/details/134378026

RefreshLayout下拉刷新上拉加载更多组件二次优化开发–也已说明

https://lichong951.blog.csdn.net/article/details/134398047

上面这几点是程序上的优化点,还有内存方面的优化项比较少,就不重复写了,本应该写完这三点之后应该就完结了,但列表加载网络图片的卡顿情况不只是程序上的问题,这是一整套系统工程,因此补充这一章说明整套优化项和优化方案策略

图片的大小和尺寸设定

由于每项业务场景使用的图片都是从后台管理上传的,但由于之前都是同一组的开发同事进行图片处理上传,知晓UI设计图片的大小和尺寸要求,因此在长达一年使用过程中都没有问题,但后面其他业务开发组的数据图片接入之后就导致了问题所在,所以回顾之前UI设计效果图片尺寸如下162x188:
在这里插入图片描述
因此给出的后台上传图片要求为
1、分辨率:162 x 188 也不是必须是这个尺寸,可以作为参考尺寸使用。像之前的那种1108 x 1282是肯定不可以的了
2、大小:参考值是5kb以下;1kb最佳。但考虑到不同业务组的实际情况,可以放开到20kb以下即可。这样的大小基本不影响渲染效果和耗时,当然如果业务上进行极限操作也可以设置到1kb以下
3、图片格式作为android当然更倾向使用webp格式的图片,但有可能IOS那边不兼容,所以使用png格式是最优解
以上是对网络图片的参考要求了

分页数据条数设定

这个对于一般的项目上应该不是问题,基本都能做到按分页要求每页10条拉取数据;
但笔者的项目就奇葩了一些需要规范一下,原本也是每页10条数据。
但后期版本迭代的时候,其他项目组的业务数据接入的时候发生了扭曲了。不能按原本的那种方式拉取每页10条数据,而是按日期拉取数据条数。这也是为什么有时候新增的页会有超过20条数据的情况发生,虽然不多,但叠加网络图片和glide的使用不当于是就体现在用户体验上卡顿情况明显了。
于是就针对性提出了后台的每天的数据条数要在10条以下,如果超过就放到后面的设定日期里,如果后面的日期里超过10条,则同理放到更后面的日期里即可。

另外就是列表布局的嵌套问题了

/**
* 布局嵌套为
* NestedScrollView
* BGARefreshLayout
* RecyclerView
* */

这样的xml布局结构笔者后来想了想应该是所有的一般的下拉刷新上拉加载更多组件都不会兼容了,也只有实际使用场景才会出现,这个就要考验开发者对开源组件和实际布局之间的落差而进行二次开发补充了。
笔者当前的博客也不过是补充了其中一种情况而已,实际的场景和UI交互设计等可能还有多种布局嵌套情况,比如横向列表嵌套到纵向列表等等,还有viewpage多重嵌套等等。
但都不用太过担心,android这些年的技术博客都足以解决这些问题。
到此整个优化过程基本完成。其实原本可以只写几个优化点就可以了,后来想了想还是做成一个完整系列把列表卡顿的优化彻底从头到尾的搞定。
参考本系列基本都能开发出接近京东或者其他大厂首页的丝滑的交互体验效果!

======END

下面是一个推荐,笔者业余开发的一个提高开发效率的工具,有兴趣或者有疑问欢迎使用留言蛤!

smartApi接口开发工具推荐

推荐理由

postman在国内使用已经越来越困难:
1、登录问题严重
2、Mock功能服务基本没法使用
3、版本更新功能已很匮乏
4、某些外力因素导致postman以后能否使用风险较大
出于以上考虑因此笔者自己开发了一款api调试开发工具SmartApi,满足基本日常开发调试api需求

简介

历时一年半多开发终于smartApi-v1.0.0版本在2023-09-15晚十点正式上线
smartApi是一款对标国外的postman的api调试开发工具,由于开发人力就作者一个所以人力有限,因此v1.0.0版本功能进行精简,大功能项有:

  • api参数填写
  • api请求响应数据展示
  • PDF形式的分享文档
  • Mock本地化解决方案
  • api列表数据本地化处理
  • 再加上UI方面的打磨

下面是一段smartApi使用介绍:
在这里插入图片描述

下载地址:

https://pan.baidu.com/s/1kFAGbsFIk3dDR64NwM5y2A?pwd=csdn

这篇关于【Android】画面卡顿优化列表流畅度六(终篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案