使用taskPool实现动态查询刷新ListView中局部信息
使用taskPool实现动态查询刷新ListView中局部信息
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS ForEach局部刷新
213浏览 • 1回复 待解决
#鸿蒙学习大百科#如何通过属性字符串实现文字中局部删除线效果?
66浏览 • 1回复 待解决
HarmonyOS List组件能实现ListItem的局部刷新吗?
520浏览 • 1回复 待解决
列表局部刷新,有人知道怎么处理吗?
627浏览 • 1回复 待解决
HarmonyOS中List组件是否支持局部刷新
329浏览 • 1回复 待解决
HarmonyOS 局部刷新,网络请求回数据后,刷新某个值
200浏览 • 1回复 待解决
如何使用taskpool实现多线程
926浏览 • 1回复 待解决
有基于ListContainer下拉刷新 像安卓中listview的第三方下拉刷新布局
6149浏览 • 2回复 待解决
List局部刷新,有人知道怎么处理吗?
966浏览 • 1回复 待解决
HarmonyOS 使用MVVM模式开发APP,使用@Observed装饰对象,观测变化时只能观测完整对象,难以实现局部刷新
395浏览 • 1回复 待解决
HarmonyOS 构建复杂viewmodel,如何做好局部更新最小刷新Component?
162浏览 • 1回复 待解决
使用taskpool实现多线程时,如何实现内存共享
2013浏览 • 1回复 待解决
HarmonyOS 界面信息刷新
61浏览 • 1回复 待解决
HarmonyOS List组件动态刷新数据问题
458浏览 • 1回复 待解决
如何使用Swiper组件实现下拉刷新
635浏览 • 1回复 待解决
HarmonyOS 拖动页面listview上下几条ite收缩的动效实现
103浏览 • 0回复 待解决
HarmonyOS taskpool使用crash
1207浏览 • 2回复 待解决
如何对某个组件实现局部截图?
237浏览 • 1回复 待解决
如何查询设备的SDK版本等信息
2135浏览 • 1回复 待解决
使用 png 作为背景图,希望能实现局部拉伸的效果。
1488浏览 • 1回复 待解决
是否可以在TaskPool中动态加载模块(HAR、HSP、SO)
1659浏览 • 1回复 待解决
HarmonyOS Promise & taskpool使用问题
100浏览 • 1回复 待解决
如何通过命令行查询窗口信息
1882浏览 • 1回复 待解决
如何实现主动控制组件刷新?例如在使用Canvas的场景需要使用代码主动刷新UI
1895浏览 • 1回复 待解决
woeker及taskpool的简单实现
738浏览 • 1回复 待解决
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