14

Day10 鸿蒙,Ability全家桶(二)如何后台运行任务

 3 years ago
source link: https://my.oschina.net/u/3534064/blog/4817025
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Day10 鸿蒙,Ability全家桶(二)如何后台运行任务

今天我们来聊一下Service Ability,基于Service模板的Ability(以下简称“Service”)主要用于后台运行任务(如执行音乐播放、文件下载等),但不提供用户交互界面。Service可由其他应用或Ability启动,即使用户切换到其他应用,Service仍将在后台继续运行。

这里就不得不提到另外一个知识点,线程。

其实目前我们前面提到的一些UI布局的绘制都是在主线程上进行的,又称UI线程,默认情况下,所有的操作都是在主线程上执行,这里如果我们系统通过ServiceAbility来完成后台运行任务,我们首先要初步了解一下asyncDispatch。

(1)初识TaskDispatcher的异步派发任务asyncDispatch;

那么TaskDispatcher又是什么呢?TaskDispatcher是一个任务分发器,它是Ability分发任务的基本接口,隐藏任务所在线程的实现细节。详细的介绍我们放到后面,先来了解异步派发任务asyncDispatch:派发任务,并立即返回,返回值是一个可用于取消任务的接口。

up-43d283d7a2931fce2677034a3ba754f0efb.png

(2)创建Service Ability;

通过工具栏File->New->Ability->Empty Service Ability来创建Service Ability,这样创建的好处是可以在config.json中自动完成Service Ability的配置。

(3)启动Service Ability;

这里还可以通过Intent的构造元素Parameters来传递参数,进行简单的数据传递。

up-050cd68515202075d4dbe184f88fbc0f005.png

(4)连接ServiceAbility

如果Service需要与Page Ability或其他应用的Service Ability进行交互,则应创建用于连接的Connection。Service支持其他Ability通过connectAbility()方法与其进行连接。在使用connectAbility()处理回调时,需要传入目标Service的Intent与IAbilityConnection的实例。IAbilityConnection提供了两个方法供开发者实现:onAbilityConnectDone()用来处理连接的回调,onAbilityDisconnectDone()用来处理断开连接的回调。

连接时步骤(1)(2)保持不变,connectAbility中传入intentService和connection。

这里详细的创建IDL文件过程可参考《IDL接口使用规范》和《定义HarmonyOS IDL接口》。这个在后续的文章中分析讨论,目前官方的接口还无法成功回调onAbilityConnectDone()。

up-ba1bb2c370efae285af27dec32606808efc.png

(5)最后附上其生命周期的说明。

ServiceAbility生命周期

本文由GZH程序员小小叶发布!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK