harmonyOS:关于Service Ability详解✨一文搞懂✨

简介: 文章目录前言一.Service Ability基本概念二.创建Service Ability1.LocalServiceAbility修改2.修改RemoteServiceAbility三.启动,停止Service1.启动Service2.停止Service三.Service的连接和断开1.连接Service2.断开Service

前言

搞清楚Page Ability后,Service Ability的概念和使用也得刻入DNA中

一.Service Ability基本概念

Service是单实例的。在一个设备上,相同的Service只会存在一个实例。如果多个Ability共用这个实例,只有当与Service绑定的所有Ability都退出后,Service才能够退出。

由于Service是在主线程里执行的,因此,如果在Service里面的操作时间过长,开发者必须在Service里创建新的线程来处理,防止造成主线程阻塞,应用程序无响应。所以那种情况要创建子线程呢,举个栗子:

比如说大视频解码,编码,大文件的处理时,处理时间过长的这种服务我们就应该放在子线程中,如果放在主线程的话,容易造成应用程序无响应。

二.创建Service Ability

命令为LocalServiceAbility

然后同样的方式再创建一个,命令为RemoteServiceAbility

1.LocalServiceAbility修改

我们回到LocalServiceAbility,做一些简单的修改

将红色框的erro修改为info,不然的话是红色,不好识别,然后format里面的内容我们加上特殊符号,不一定是+号,反正易于识别就行了。

下面的这行代码也要改

改为下图

tag改为文件名,也是方便在看日志时易于识别,type改为HiLog.LOG_APP,

2.修改RemoteServiceAbility

同上原理一样,修改RemoteServiceAbility,只不过domain改为0xD001200,tag改为本文件名,该加特殊符号的加特殊符号

创建一个utils包

获取远程设备的id的工具DeviceUtils

UI组件工具

代码

package com.harmony.myapplication.utils;
import ohos.agp.utils.LayoutAlignment;
import ohos.agp.window.dialog.ToastDialog;
import ohos.app.Context;
public class UIUtils {
    public static void showTip(Context context,String msg){
        ToastDialog toastDialog = new ToastDialog(context);
        toastDialog.setText(msg);
        toastDialog.setAlignment(LayoutAlignment.CENTER);
        toastDialog.show();
    }
}

三.启动,停止Service

1.启动Service

如何启动Service,Ability为开发者提供了startAbility()方法来启动另外一个Ability,因为Service也是Ability的一种,开发者同样可以通过将Intent传递给该方法来启动Service。不仅支持启动本地Service,还支持启动远程Service。

启动Service主要用于启动一个服务执行后台任务或者远程启动一个功能,不进行通信,比如:用一个设备让另一个播放音乐。Service在其他Ability调用startAbility()时创建,然后保持运行。

(1).onStart()

该方法在创建Service的时候调用,用于Service的初始化。在Service的整个生命周期只会调用一次,调用时传入的Intent应为空。

(2).onCommand()

在Service创建完成之后调用,该方法在客户端每次启动该Service时都会调用,开发者可以在该方法中做一些调用统计、初始化类的操作。

(3).onStop()

在Service销毁时调用。Service应通过实现此方法来清理任何资源,如关闭线程、注册的侦听器等。

2.停止Service

Service一旦创建就会一直保持在后台运行,除非必须回收内存资源,否则系统不会停止或销毁Service。开发者可以在Service中通过terminateAbility()停止本Service或在其他Ability调用stopAbility()来停止Service。

停止Service同样支持停止本地设备Service和停止远程设备Service,使用方法与启动Service一样。一旦调用停止Service的方法,系统便会销毁Service。

三.Service的连接和断开

1.连接Service

如果Service需要与Page Ability或其他应用的Service Ability进行交互,则须创建用于连接的Connection。Service支持其他Ability通过connectAbility()方法与其进行连接。

onConnect()

在Ability和Service连接时调用,该方法返回IRemoteObject对象,开发者可以在该回调函数中生成对应Service的IPC通信通道,以便Ability与Service交互。Ability可以多次连接同一个Service,系统会缓存该Service的IPC通信对象,只有第一个客户端连接Service时,系统才会调用Service的onConnect方法来生成IRemoteObject对象,而后系统会将同一个RemoteObject对象传递至其他连接同一个Service的所有客户端,而无需再次调用onConnect方法。

连接时需要使用connectAbility()方法,需要传入目标Service的Intent与IAbilityConnection的实例,IAbilityConnection提供了两个方法供开发者实现:onAbilityConnectDone()是用来处理连接Service成功的回调,onAbilityDisconnectDone()是用来处理Service异常死亡的回调。

2.断开Service

该Service在其他Ability调用connectAbility()时创建,客户端可通过调用disconnectAbility()断开连接。多个客户端可以绑定到相同Service,而且当所有绑定全部取消后,系统即会销毁该Service。

onDisconnect()

在Ability与绑定的Service断开连接时调用。

相关文章
|
3月前
|
开发者
FA/Stage模型:理解HarmonyOS的FA(Feature Ability)和Stage(Particle Ability)模型
【10月更文挑战第21天】HarmonyOS作为新一代的操作系统,其独特的FA(Feature Ability)和Stage(Particle Ability)模型为应用开发提供了新的视角。这两种模型分别代表了不同的应用组织方式,下面将详细解释这两种模型的概念、特点以及如何在实际开发中使用它们。
222 4
|
8月前
|
开发框架 Java 数据库
初学鸿蒙OS之Ability认知
初学鸿蒙OS之Ability认知
228 0
|
缓存 API 开发者
HarmonyOS学习路之开发篇——Service Ability
基于Service模板的Ability(以下简称“Service”)主要用于后台运行任务(如执行音乐播放、文件下载等),但不提供用户交互界面。Service可由其他应用或Ability启动,即使用户切换到其他应用,Service仍将在后台继续运行。
HarmonyOS ArkTS Ability内页面的跳转和数据传递
HarmonyOS ArkTS Ability 的数据传递包括有 Ability 内页面的跳转和数据传递、Ability 间的数据跳转和数据传递。本节主要讲解 Ability 内页面的跳转和数据传递。 打开 DevEco Studio,选择一个 Empty Ability 工程模板,创建一个名为 “ArkUIPagesRouter” 的工程为演示示例。
796 1
HarmonyOS学习路之开发篇——Page Ability
Page与AbilitySlice Page模板(以下简称“Page”)是FA唯一支持的模板,用于提供与用户交互的能力。一个Page可以由一个或多个AbilitySlice构成,AbilitySlice是指应用的单个页面及其控制逻辑的总和。
|
存储 关系型数据库 数据管理
HarmonyOS学习路之开发篇——Data Ability
使用Data模板的Ability(以下简称“Data”)有助于应用管理其自身和其他应用存储数据的访问,并提供与其他应用共享数据的方法。Data既可用于同设备不同应用的数据共享,也支持跨设备不同应用的数据共享。
HarmonyOS学习路之开发篇——Ability
Ability是应用所具备能力的抽象,也是应用程序的重要组成部分。一个应用可以具备多种能力(即可以包含多个Ability),HarmonyOS支持应用以Ability为单位进行部署。Ability可以分为FA(Feature Ability)和PA(Particle Ability)两种类型,每种类型为开发者提供了不同的模板,以便实现不同的业务功能。
|
XML 前端开发 Java
(2.1)HarmonyOS鸿蒙Ability创建,XML和Java页面布局UI
(2.1)HarmonyOS鸿蒙Ability创建,XML和Java页面布局UI
202 1
(2.1)HarmonyOS鸿蒙Ability创建,XML和Java页面布局UI
(1.1)HarmonyOS鸿蒙中Ability概念及意义
(1.1)HarmonyOS鸿蒙中Ability概念及意义
313 1
(1.1)HarmonyOS鸿蒙中Ability概念及意义
|
Java 数据库
【鸿蒙】Data Ability本地数据库写入读取数据
1)配置权限和UI的实现 放在config.json的abilities同级下
【鸿蒙】Data Ability本地数据库写入读取数据