使用taskPool实现动态查询刷新ListView中局部信息

使用taskPool实现动态查询刷新ListView中局部信息

HarmonyOS
2024-06-11 20:13:02
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
hmogy

1 使用场景

适合ListView中的item数量较多,并且局部信息查询耗时或者加载耗费资源的场景。

以文件管理的实际业务背景为例:文件夹子文件的个数刷新、缩略图的加载等

2添加任务时机

考虑到ListView中文件数量如果很大,单不是所有的item用户都会去看,因此,仅在改item被创建的时候去查询该信息是否有,如果没有则添加到任务列表里去查询。至于那些ListView中没被创建的item,则不需要添加任务。

本文以文件管理查询目录的子文件为例:

在调用接口查询文件列表时,将文件夹子文件数量设置成-1,在FileItem执行到aboutToAppear的时候,判断当前是否是文件夹,如果是文件夹,并且文件夹数量为-1,则添加到任务队列里等待查询,如果不是-1,则代表该文件夹数量已经查询过,无需添加到任务列表里。

3关于TaskItem

该Item包含两部分:

1)  listItem: ListView中对应的item

2)  callback: 回调方法:主要包括刷新item方法和其他业务逻辑。

以文件管理查询文件夹项数为例,callback为notifyItemChange方法,查询到信息后,

通知ListView刷新单条item

4实现一个taskPool的Manager用于管理这一类的任务,

其中:

1)MAX_RUNNING_TASK_NUM:可以并行的线程数

2)MAX_TASK_NUM: 线程池最大等待执行的任务数,防止无止境的添加,造成内存泄漏

3)taskList: 待执行的任务列表

4)runningNum:正在执行的任务数量

5)execute对外暴露的执行任务方法

在execute方法中首先创建一个taskItem,并且添加到taskList中去,如果taskList的长度超过最大长度,则把前面的舍弃。

6)启动任务

在startTask中查询当前正在执行的线程数量和设置的最大线程数量进行对比,如果没达到,则从taskList中弹出一个taskItem去执行,直到当前线程数量达到最大数量。

7)任务回调

执行完任务后,调用taskItem里面的callback方法进行刷新ListView里面对应的item,并且重新启动任务startTask

分享
微博
QQ
微信
回复
2024-06-12 16:39:51
相关问题
如何使用taskpool实现多线程
477浏览 • 1回复 待解决
如何使用Swiper组件实现下拉刷新
146浏览 • 1回复 待解决
woeker及taskpool的简单实现
294浏览 • 1回复 待解决
taskpool使用 ,谁有好的方案?
206浏览 • 1回复 待解决
如何通过命令行查询窗口信息
683浏览 • 1回复 待解决
如何查询设备的SDK版本等信息
702浏览 • 1回复 待解决
TaskPool里面是否可以使用EventHub
495浏览 • 1回复 待解决
taskpool 使用问题,有人知道吗?
392浏览 • 1回复 待解决
Refresh结合lottie实现下拉刷新动画
455浏览 • 1回复 待解决
鸿蒙js 如何使用动态style
6032浏览 • 1回复 待解决
ets怎么实现动态添加组件?
2039浏览 • 1回复 待解决
路由实现动态页面的跳转方案
555浏览 • 1回复 待解决
是否支持模块的动态加载?如何实现
747浏览 • 1回复 待解决
mongodb实现特定值排序查询
960浏览 • 1回复 待解决
使用OrmPredicates无法做函数查询吗?
4304浏览 • 1回复 待解决