鸿蒙Swiper+LazyForEach组件设置cachedCount为0时,偶现被滑出的页面组件没有被销毁问题

69 阅读1分钟

问题:在使用swiper时设置缓存数为0,这个时候如果快速滑动后(1->2->3->4->5),立马回滑动(5->4),偶现被滑出的页面组件(4)没有被销毁问题;

原因:在鸿蒙的LazyForEach组件中,会先渲染被创建的组件5,在一帧内渲染完成之后(一帧布局短的时候剩下的时间,如果每帧很长就没有空闲的时间来处理idle的逻辑了),idle里才会去销毁组件4。但是如果组件5在帧内没有被渲染完成时,立马滑回组件4,这个时候组件4就来不及被销毁。但是组件4又回到了屏幕当中,这个时候就不会在执行之前销毁组件4的逻辑。

解决方案: 方案一:推荐不使用cachedCount为0, 方案二:尽量使组件的初始化逻辑不要太耗时,使他一帧能够绘制完成;其余的复杂逻辑绘制可以在后续逻辑中完成;尽量使第一帧绘制完成之后系统能够去立马销毁组件4(类似Android中的IdleHandler逻辑类似)