
鸿蒙应用开发之ListContainer
前言
本文主要介绍鸿蒙应用开发中的ListContainer控件的使用,其中涉及以下几个鸿蒙sdk的知识点。
- ListContainer
- TaskDispatcher
- EventHandler
我们废话不多说,直接进入正题。
ListContainer
ListContainer等同于Android中的Listview,将会是以后我们日常开发最常使用的控件之一。为什么说等同于Listview呢?不仅是因为效果基本一致,连Api的设计和代码实现都基本一致,上代码
ListItemProvider.java
这个类的实现是不是似曾相识?不就是Listview的Adapter嘛,当然这和官方的demo写法不一样,但是这么写,android的同学估计一分钟就能理解了。ListContainer基本照搬了Listview的控件设计,包括Listview模版复用特性。
list_item.xml
‘
这是item的布局文件,不做展开。
list.xml
这是主布局文件,比较简单,就是ListContainer的声明。
MainAbilitySlice.java
MainAbilitySlice相当于Fragment,最终的实现在这里。重要的步骤已经注释了,也基本上是Listview的使用流程。其实到这里,简单的ListContainer已经完成了,我们这里再简单介绍下EventHandler和TaskDispatcher。
EventHandler
EventHandler在官方文档中篇幅不小,从使用角度,它就是android中的handler,当然其背后的原理可能不一样,还没研究过(估计大同小异),但是使用完全可以参照handler,看下我上面的代码,是不是就是handler的写法。详细介绍下次专门写篇介绍。
TaskDispatcher
看到这里,感觉鸿蒙的这些api都和android极其相似,那TaskDispatcher像是android中的什么呢?还真没有它的兄弟,它更像是android中asynctask的替代,但是设计和使用都天差地别。 官方解释:TaskDispatcher是一个任务分发器,它是Ability分发任务的基本接口,隐藏任务所在线程的实现细节。以下是TaskDispatcher的几种实现。
- GlobalTaskDispatcher:全局并发任务分发器,由Ability执行getGlobalTaskDispatcher()获取。适用于任务之间没有联系的情况。一个应用只有一个
- GlobalTaskDispatcher,它在程序结束时才被销毁。
- ParallelTaskDispatcher:并发任务分发器,由Ability执行createParallelTaskDispatcher()创建并返回。与GlobalTaskDispatcher不同的是,ParallelTaskDispatcher不具有全局唯一性,可以创建多个。开发者在创建或销毁dispatcher时,需要持有对应的对象引用 。
- SerialTaskDispatcher:串行任务分发器,由Ability执行createSerialTaskDispatcher()创建并返回。由该分发器分发的所有的任务都是按顺序执行,但是执行这些任务的线程并不是固定的。如果要执行并行任务,应使用ParallelTaskDispatcher或者GlobalTaskDispatcher,而不是创建多个SerialTaskDispatcher。如果任务之间没有依赖,应使用GlobalTaskDispatcher来实现。它的创建和销毁由开发者自己管理,开发者在使用期间需要持有该对象引用。
- SpecTaskDispatcher:专有任务分发器,绑定到专有线程上的任务分发器。目前已有的专有线程是主线程。UITaskDispatcher和MainTaskDispatcher都属于SpecTaskDispatcher。建议使用UITaskDispatcher。
UITaskDispatcher:绑定到应用主线程的专有任务分发器, 由Ability执行getUITaskDispatcher()创建并返回。 由该分发器分发的所有的任务都是在主线程上按顺序执行,它在应用程序结束时被销毁。
上面的文字都是官方文档上的,就是想告诉你这些知识点。这里先不展开,简单理解,他就是一个任务分发绑定着一个线程池,来帮助应用开发者简便的完成异步任务。
总结
支持鸿蒙,支持鸿蒙生态。这是真国货,想交朋友的,大家交个朋友,一起学习进步,写的不好,请见谅。
作者:暗影萨满
