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

2023-11-21 05:28

本文主要是介绍【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/400111

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,