使用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
相关问题
HarmonyOS ForEach局部刷新
213浏览 • 1回复 待解决
HarmonyOS中List组件是否支持局部刷新
329浏览 • 1回复 待解决
如何使用taskpool实现多线程
926浏览 • 1回复 待解决
HarmonyOS 界面信息刷新
61浏览 • 1回复 待解决
HarmonyOS List组件动态刷新数据问题
458浏览 • 1回复 待解决
如何使用Swiper组件实现下拉刷新
635浏览 • 1回复 待解决
HarmonyOS taskpool使用crash
1207浏览 • 2回复 待解决
如何对某个组件实现局部截图?
237浏览 • 1回复 待解决
如何查询设备的SDK版本等信息
2135浏览 • 1回复 待解决
HarmonyOS Promise & taskpool使用问题
100浏览 • 1回复 待解决
如何通过命令行查询窗口信息
1882浏览 • 1回复 待解决
woeker及taskpool的简单实现
738浏览 • 1回复 待解决