使用taskPool实现动态查询刷新ListView中局部信息
使用taskPool实现动态查询刷新ListView中局部信息
HarmonyOS
赞
收藏 0
回答 1
相关问题
HarmonyOS ForEach局部刷新
1315浏览 • 1回复 待解决
#鸿蒙学习大百科#如何通过属性字符串实现文字中局部删除线效果?
812浏览 • 1回复 待解决
HarmonyOS 列表数据刷新,能够实现item的局部刷新吗
709浏览 • 1回复 待解决
HarmonyOS list局部刷新的问题
532浏览 • 1回复 待解决
HarmonyOS List组件能实现ListItem的局部刷新吗?
1899浏览 • 1回复 待解决
列表局部刷新,有人知道怎么处理吗?
1400浏览 • 1回复 待解决
HarmonyOS中List组件是否支持局部刷新
1222浏览 • 1回复 待解决
HarmonyOS 局部刷新,网络请求回数据后,刷新某个值
1456浏览 • 1回复 待解决
List局部刷新,有人知道怎么处理吗?
1918浏览 • 1回复 待解决
HarmonyOS List组件是否可以控制局部刷新
1208浏览 • 1回复 待解决
HarmonyOS 数据结构多级嵌套如何局部刷新
840浏览 • 1回复 待解决
HarmonyOS 子组件隐藏后显示,局部刷新数据
609浏览 • 1回复 待解决
如何使用taskpool实现多线程
1969浏览 • 1回复 待解决
HarmonyOS 使用MVVM模式开发APP,使用@Observed装饰对象,观测变化时只能观测完整对象,难以实现局部刷新
1216浏览 • 1回复 待解决
有基于ListContainer下拉刷新 像安卓中listview的第三方下拉刷新布局
7166浏览 • 2回复 待解决
HarmonyOS 如何实现可展开的listview功能
535浏览 • 1回复 待解决
HarmonyOS 构建复杂viewmodel,如何做好局部更新最小刷新Component?
1129浏览 • 1回复 待解决
HarmonyOS 界面信息刷新
831浏览 • 1回复 待解决
HarmonyOS 如何查询设备终端信息
729浏览 • 1回复 待解决
查询应用信息方法编译报错
1206浏览 • 1回复 待解决
使用taskpool实现多线程时,如何实现内存共享
3096浏览 • 1回复 待解决
如何查询设备的SDK版本等信息
3358浏览 • 1回复 待解决
如何对某个组件实现局部截图?
858浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中实现动态网格布局刷新
954浏览 • 1回复 待解决
HarmonyOS 拖动页面listview上下几条ite收缩的动效实现
981浏览 • 0回复 待解决
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