
先确认是不是构建开销
打开性能覆盖层看界面线程与光栅线程的耗时。界面线程超过一帧预算说明构建或布局太重,光栅线程超时则偏向绘制和图层问题。
列表项构建方法里做复杂计算、频繁创建对象、同步读取文件,都会拖慢界面线程。把计算移出构建方法,用缓存或者提前算好。
用常量构造和把不变的子树提成独立组件,能减少重建范围。构建方法返回超长的组件树时,任何一次父级刷新都会全部重建。
懒加载的正确姿势
构造器形式的列表只在需要时构建可见项,配合固定项高度或原型项能让滚动条与跳转更精确,也省掉测量开销。
绝对不要在构造器外面把所有数据映射成组件列表再传进去,那样等于一次性构建全部子项,懒加载完全失效。
项数量要给准确值。数据分页时提前把总数算出来,避免滚动过程中数量变化引起跳动。滚动到底部触发加载时要防止重复触发,用一个进行中的标记位控制。
固定尺寸与重绘边界
能给固定高度的项就设定固定高度,省去布局测量。文字行数用最大行数加溢出处理限制,避免长文本撑开高度造成抖动。
图片必须指定尺寸,未指定尺寸的网络图会先按占位高度布局再跳变。用占位色块加淡入过渡,观感更稳。
重绘边界用在确实独立重绘的复杂子项上,滥用会增加图层数量和内存,反而更慢。先用性能覆盖层确认瓶颈再决定。子项内部如果有频繁动画,把动画部分单独隔离,避免带动整项重绘。
图片与内存压力
列表里大量高分辨率图会显著增加内存,滚动时容易触发频繁的垃圾回收。按显示尺寸解码,用缓存宽度参数限制解码大小。
图片缓存要设上限,无限缓存最终会拖垮应用。结合系统的内存压力回调做清理,比只依赖固定阈值更贴合设备情况。
预加载相邻若干张可以提升流畅度,但预加载数量过多会挤占内存并抢带宽,需要按图片大小和设备档次调整。列表快速滚动时应暂停图片加载,等速度降下来再继续,避免瞬时的解码压力。
状态更新与时间线定位
用全局状态管理时,一个字段变化可能触发整页重建。把监听范围收窄到真正依赖该字段的组件,或者用选择器只订阅需要的切片。列表追加数据时尽量复用已有项,分页加载完成后再统一通知刷新。
滚动监听里不要做重活。把位置计算、可见性判断做成轻量逻辑,重逻辑延后到空闲时执行。
性能面板里选中某一帧,能看到这一帧的构建、布局、绘制耗时分布。找到连续掉帧的区间,再结合代码判断原因。
真机性能普遍弱于模拟器,低端安卓机尤其明显。发布前的滑动流畅度验证放在真机上做,模拟器结果参考价值有限。


