近日,见到有人遇到针对特殊列表滚动时占用内存严重导致闪退的问题,原因是没有对列表中的动画和加载的耗时操作做优化。我们知道,cell是重用的,没加载在屏幕上的cell内部是不会进行布局和任务处理的,而加载完的列表最多也就一屏,所以这个问题发生一定是在滑动的时候大量加载动画导致的。
知道了原因,我们只需要在滑动时控制动画的加载和暂停与否就可以优化这个列表。
在原生中这种优化比较常见,也不难,但出现的场景却颇为少见,接下来,我们针对原生思想来对这样一个列表做优化。
在网上搜索了下针对这个问题的博客,都是讲的监听,也是从官方那里拿来的,对于怎么使用讲解也比较浅薄,对于一个初学者来说不好下手,这也是这篇博客诞生的初衷,帮助初学者更好的学习监听列表状态,并解决一些优化问题。
ps:虽说这个东西简单,那也只是针对有丰富开发经验的人来说,对于一些入行几年的人,还是有些难度的。
方案一:
博主一开始想到的是通过ScrollController监听ListView的滑动偏移量,通过一个bool变量来控制全局的cell内显示,我们来看下效果: