【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

相关文章

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

MySQL中like模糊查询的优化方案

《MySQL中like模糊查询的优化方案》在MySQL中,like模糊查询是一种常用的查询方式,但在某些情况下可能会导致性能问题,本文将介绍八种优化MySQL中like模糊查询的方法,需要的朋友可以参... 目录1. 避免以通配符开头的查询2. 使用全文索引(Full-text Index)3. 使用前缀索

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I