始终关注咱们的小伙伴们必定据说过“原子化服务”了,可能有些小伙伴还据说过“元服务”。元服务,其实就是原子化服务。那么原子化服务到底是什么,权威的官网解析来啦~

一、原子化服务是什么?

咱们日常生活中曾经习惯了利用的概念,而原子化服务是HarmonyOS面向未来提供的一种用户程序状态。为什么须要一种新的用户程序状态呢?

传统的利用是以设施为核心,应用前必须手动装置利用,这样导致利用像生了根一样,牢牢的固定在某个设施上。而在万物互联的时代,人均持有设施量一直攀升,设施和场景的多样性,每个设施都须要独立开发一个利用,先装置后应用、不同设施的能力不兼容等传统利用的短板逐渐裸露进去。在此背景下,利用提供方和用户都迫切需要一种新的服务提供形式,使利用开发更简略、服务(如听音乐、打车等)的获取和应用更便捷,原子化服务也就此诞生。

那么原子化服务到底是什么呢?

原子化服务是HarmonyOS提供的一种面向未来的服务形式,是有独立入口的(用户可通过点击形式间接触发)、免装置的(无需显式装置,由零碎后盾装置后即可应用)、可为用户提供一个或多个便捷服务的用户应用程序状态。

例如:传统形式的购物利用,在依照原子化服务理念调整设计后,能够由多个服务中转、免装置的原子化服务实现,比方“商品浏览”、“购物车”、“领取”等。

二、带您体验原子化服务

上面让我带您体验一下原子化服务,帮忙大家更好地理解原子化服务到底是什么样的。

2.1多种入口

咱们能够通过多种形式发现原子化服务:

1.一种为NFC标签,另一种为多功能码。NFC标签为物理打印标签,反对手机碰一碰应用相应服务。多功能码能够为物理打印的标签,反对手机碰一碰及扫一扫应用相应服务,也能够为屏幕上出现的电子标签,反对扫一扫。多功能码有两种款式,别离用于跨设施体验和三方服务。

2.用户也能够在设施的服务中心、桌面等中央发现并治理原子化服务。

3.原子化服务能够基于适合场景被被动举荐给用户应用;用户也能够在服务中心和小艺倡议中发现零碎举荐的服务。

阐明:“小艺”是语音助手在华为设施中的名字。小艺能够答复用户的问题、管制家居设施、执行用户的日常工作等;而且,小艺能够通过不同设施感知用户的应用场景,举荐用户可能须要的服务。

2.2服务卡片

与传统利用不同,原子化服务在设施桌面没有利用图标,是通过服务卡片的模式将重要信息展现在服务中心或者桌面。用户点击服务卡片,即可进入原子化服务的服务界面。

服务卡片的核心理念在于提供用户容易应用且高深莫测的信息内容,将智慧化能力融入到服务卡片的体验中供用户抉择应用,同时满足在不同终端设备上的展现和自适应。

值得注意的是,原子化服务和HarmonyOS利用都反对服务卡片。对于原子化服务,服务卡片是必选的,每个原子化服务至多有一个服务卡片。而对于HarmonyOS利用,服务卡片是可选配置。

阐明:HarmonyOS利用,即运行在HarmonyOS零碎上且具备HarmonyOS个性的利用。

2.3服务流转

原子化服务反对运行在1+8+N设施上。

●“1”代表手机

●“8”代表平板、智慧屏、音箱、眼镜、手表、车机、耳机、PC

●“N”代表静止衰弱、智能家居、智慧出行、智慧办公、影音娱乐等场景延长的泛IoT设施。

原子化服务的流转能力突破设施界线,多设施联动,使原子化服务可分可合、可流转,实现如邮件跨设施编辑、多设施协同健身、多屏游戏等分布式业务。

原子化服务的流转触发形式有两种:零碎举荐流转和用户手动流转。

①零碎举荐流转:用户应用原子化服务时,如果所处环境中存在应用体验更优的可选设施,则零碎主动为用户举荐该设施,用户可确认是否启动流转。

②用户手动流转:用户能够手动抉择适合的设施进行流转。用户点击图标后,会调起零碎提供的流转面板。面板中会展现出原子化服务的信息及可流转的设施,疏导用户进行后续的流转操作。

2.4服务分享

原子化服务所提供的便捷服务,能够通过接入华为分享实现近距离疾速分享,使便捷服务能够精准疾速的推送至接管方,升高用户触达服务的老本,晋升用户体验。相比于传统的社交软件分享,分享单方无需建设好友关系,接管方无需提前装置承载服务的安装包,即可享受原生的服务体验。

用户可在原子化服务内抉择分享,关上“华为分享”开关后,将原子化服务分享给左近同样关上了“华为分享”开关的好友,好友点击确认后间接启动服务。下图是通过“华为分享”分享购物类原子化服务的典型场景。

三、原子化服务的劣势在哪里?

3.1一次开发,多端部署

对于开发者而言,原子化服务只需开发一次,便能够部署在各种HarmonyOS终端上,大大降低了开发成本。

对于传统的APP软件开发者来说,一个绕不开的懊恼就是同一个APP须要别离针对不同的设施进行适配。比方程序员在手机上开发了一款利用,针对手表须要从新适配、公布到手表的利用市场;针对大屏适配后,再公布到大屏的利用市场,重大影响了利用的开发效率和变现能力。

HarmonyOS在架构设计之初,就提出了一次构建反对多端部署的架构设计准则。HarmonyOS通过提供用户程序框架、Ability框架以及UI框架,可能保障开发的利用在多终端运行时保障一致性。多终端软件平台API具备一致性,确保用户程序的运行兼容性。如此一来,开发者仅需为不同状态的设施配置不同参数,IDE就可能主动生成反对多设施散发的APP包。APP包上架利用市场后,利用市场会主动依照设施类型进行HAP包的拆分、组装和散发,进而端到端实现了一次开发,反对多端部署的设计。

具体流程如下:

  1. 开发阶段,IDE基于包格局编译打包反对多设施的利用包。
  2. 上架到利用市场。
  3. 在云侧对App进行拆包,部署到CDN(Content Delivery Network,内容散发网络),包信息同步到服务散发核心。
  4. 端侧运行过程中,依据本身设施类型获取相应的HAP及整体摘要信息。

3.2免装置,秒级关上

消费者不感知装置过程和卸载过程,体验全新降级。

HarmonyOS 原子化服务是轻量化服务的新物种,它提供了全新的服务和交互方式。用户在应用原子化服务时,如果服务未部署,零碎将通过云端主动部署服务,部署胜利后即可应用对应服务。例如,在服务中心点击服务卡片,原子化服务通过免装置能力实现部署和运行,实现服务中转的业务体验。毋庸用户跳转到传统的利用散发市场,搜寻下载指标利用,使得在设施上部署利用更加疾速。

随着分布式场景生态的丰盛,原子化服务要始终以人为核心,在不同设施间流转。当用户走到大屏设施前,手机上的视频电话能够流转到大屏沟通,当用户走到电脑前,手机和电脑能够协同办公,原子化服务可能在不烦扰用户的状况下实现了主动部署,同时,零碎会智能地清理已部署的低频服务。

这就是原子化服务的免装置能力,一方面晋升开发者上架利用的散发效率和转化率,一方面晋升消费者的服务体验,缩小装置过程对用户的烦扰。

3.3以人为核心,分布式流转

分布式流转是实现原子化服务以人为核心的核心技术。

随着5G和IoT设施的倒退,集体领有了多个智能设施也逐渐成为支流场景。手机、笔记本、PAD、电视、静止手表、耳机、冰箱、抽油烟机、智能门锁等这类智能设施在搭载HarmonyOS零碎后,通过分布式软总线连接起来,就能够造成一个超级的终端。不同的设施之间,通过从新业务组合,能够造成新的用户体验。

例如:用户坐在书桌前用手机观看视频,又心愿转移到客厅,坐在沙发上用大屏持续视频的观看。业界大多采纳投屏的计划实现,如DLNA、Cast+等。而原子化服务采纳的分布式组件流转的技术,简略来讲,就是HarmonyOS系统管理着原子化服务过程实体的上下文环境(关上的文件句柄,硬件,运行状态),并对上下文数据进行跨设施的备份、传输和复原。如下图示意:

对于用户来说,流转操作该当是便捷的,高效的,无副作用的。用户能够进行重复流转,利用实体可能始终维持其状态。为了保障用户交互的一致性,流转的入口由零碎对立提供。对于应用程序的一致性,由开发者保护。例如:当利用从手机迁徙到大屏之后,其控件、款式、布局等方面该当尽可能保持一致。但“统一”不意味着“一样”:针对手机,平板电脑或者大屏各自屏幕的特色,其用户界面该当做好相应的适配。

3.4比照App Clips和小程序,有什么劣势?

App Clips和小程序实质上都是针对服务线上化、交易闭环的场景在定义产品,人造谋求随处可及和服务中转的个性。原子化服务与之相比,有以下劣势:

  1. 原子化服务是面向未来超级终端的服务状态,笼罩更宽泛的IoT设施,具备1+8+N设施兼容的API接口,这也是原子化服务相比APP Clips和小程序更具竞争力的根基。
  2. 原子化服务是基于分布式全场景体验指标而设计的,也是与App Clips和小程序在设计理念上的最大不同。HarmonyOS提供了超强的分布式能力,可能让开发者疾速实现一个分布式业务。
  3. 原子化服务有服务中心、碰一碰、扫一扫、卡片分享、流转业务触发等相比App Clips和小程序更为丰盛的入口, 反对服务疾速中转。

四、如何开发原子化服务?

置信很多的开发者小伙伴们更为关注的是如何开发原子化服务,上面咱们就来介绍。

4.1总体开发要求

  1. 原子化服务的所有HAP包均须要满足免装置要求。
  2. 免装置的HAP包不能超过10MB。
  3. 原子化服务降级时,新版本也要放弃免装置属性。
  4. 目前反对免装置的HAP的设施类型有:手机、平板、智慧屏、智能穿戴,版本均须要在HarmonyOS 2版本及以上。
  5. 原子化服务如果要在服务中心露出,则须要满足:

●该服务对应的HAP包须要蕴含FA,且指定惟一的一个“MainAbility”作为用户操作入口。

●须要配置一个小尺寸服务卡片(2*2规格),以及配置根底信息:如图标、名称、形容、快照等。

原子化服务的具体设计说明,能够参考官网:
https://developer.harmonyos.c...

4.2开发工具

HUAWEI DevEco Studio(以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设施的一站式集成开发环境(IDE),为开发者提供工程模板创立、开发、编译、调试、公布等E2E的HarmonyOS利用开发服务。

DevEco Studio下载链接:
https://developer.harmonyos.c...

咱们应用DevEco Studio工具来开发原子化服务。该工具的具体应用阐明,能够参考官网:
https://developer.harmonyos.c...

4.3开发过程及留神点

1. 创立工程

(1) 运行DevEco Studio工具,在菜单栏抉择File > New > New Project。

(2) 依据工程创立向导,抉择须要的Ability工程模板,而后点击Next。

(3) 配置工程的根本信息。

Project Name:工程的名称,能够自定义。

Project Type:工程的类型,Service示意原子化服务,Application示意传统形式的须要装置的利用。因为要创立原子化服务工程,这里抉择Service。

Device Type:依据须要抉择该工程反对的设施类型。反对多选。
注:如果勾选了TV,则上面的“Show in Service Center”会隐没。

Show in Service Center:是否在服务中心露出。开启此开关,则默认创立一张小尺寸(2x2)服务卡片和快照。

(4) 点击Finish,工具会主动生成示例代码和相干资源,期待工程创立实现。

2. 工程配置

(1) config.json配置文件

每个HAP的根目录下都存在一个config.json配置文件,文件内容次要涵盖以下三个方面:

●利用的全局配置信息,蕴含利用的包名、生产厂商、版本号等根本信息。

●利用在具体设施上的配置信息,蕴含利用的备份复原、网络安全等能力。

●HAP包的配置信息,蕴含每个Ability必须定义的根本属性(如包名、类名、类型以及Ability提供的能力),以及利用拜访零碎或其余利用受爱护局部所需的权限等。

工程创立实现之后,config.json文件默认蕴含以下配置内容。

① 免装置配置信息

"distro": { "deliveryWithInstall": true, "moduleName": "entry", "moduleType": "entry", "installationFree": true }

installationFree为true示意该HAP是免装置的。

② 服务卡片配置信息

因为创立工程时开启了Show in Service Center开关,所以默认配置了此信息。

"abilities": [

{

"skills": [

...

],

"name": "com.example.atomicservicedemo.MainAbility",

"icon": "$media:icon",

"description": "$string:mainability_description",

"formsEnabled": true,

"label": "$string:app_name",

"type": "page",

"forms": [

{

"jsComponentName": "widget",

"isDefault": true,

"scheduledUpdateTime": "10:30",

"defaultDimension": "2*2",

"name": "widget",

"description": "$string:widget_description",

"colorMode": "auto",

"type": "JS",

"supportDimensions": [

"2*2"

],

"updateEnabled": true,

"updateDuration": 1

}

],

"launchType": "standard"

}

]

config.json文件的具体阐明,能够参考官网:
https://developer.harmonyos.c...

(2)快照

创立工程时,如果开启了Show in Service Center开关,工程创立实现后会在工程目录下主动生成快照(EntryCard)文件夹。如下图所示:

此文件夹下默认生成了一张2x2(小尺寸)的快照(一张png格局的图片)。开发者能够将其替换为当时设计好的2x2快照,款式上应与对应的服务卡片保持一致:将新的快照拷贝到上图目录下,删除默认图片,新图片命名遵循格局“服务卡片名-2x2.png”。

阐明:“服务卡片名”能够查看config.json文件的forms数组中的“name”字段。

3. 开发原子化服务

之前的推文中,咱们曾经介绍过服务卡片的开发,此处不再赘述,点击下方文字即可。

一文看懂HarmonyOS服务卡片运行原理和开发方法

咱们重点介绍一下如何将原子化服务接入到华为分享。

以JAVA工程为例,开发步骤如下:

① 新建两个idl文件,用于和华为分享进行跨过程通信。

IHwShareCallback.idl文件:

interface com.huawei.hwshare.third.IHwShareCallback {

[oneway] void notifyState([in] int state);

}

IHwShareService.idl文件:

sequenceable ohos.interwork.utils.PacMapEx;

interface com.huawei.hwshare.third.IHwShareCallback;

interface com.huawei.hwshare.third.IHwShareService {

int startAuth([in] String appId, [in] IHwShareCallback callback);

int shareFaInfo([in] PacMapEx pacMapEx);

}

开发者只需将.idl文件保留至DevEco Studio我的项目的src/目录内,工具则会在构建利用时,在我的项目的generated/目录中生成IRemoteObject接口文件、Stub文件、Proxy文件。IHwShareCallback.idl文件和IHwShareService.idl文件会生成对应的IHwShareCallback.java和IHwShareService.java。

② 新建一个治理类“
ShareAtomicServiceManager.java”,用于治理与华为分享的跨过程通信。

这里对外裸露一个接口:

public void shareFaInfo(String appId, PacMapEx pacMap) {

if (mContext == null) {

return;

}

mAppId = appId;

mSharePacMap = pacMap;

mHandler.removeTask(mTask);

shareFaInfo();

bindShareService();

}

●appId是利用在利用市场的惟一标识,在创立我的项目时生成。

●pacMap是须要传递给华为分享的信息。

●shareFaInfo()用于分享FA信息到华为分享利用中,代码如下:

private void shareFaInfo() {

if (mShareService == null) {

return;

}

if (mHasPermission) {

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, "start shareFaInfo.");

try {

mShareService.shareFaInfo(mSharePacMap);

mSharePacMap = null;

} catch (RemoteException e) {

HiLog.error(LABEL_LOG, LOG_FORMAT, TAG, "shareFaInfo error.");

}

}

// 不应用时断开

mHandler.postTask(mTask, UNBIND_TIME);

}

其中,mTask用于执行断连的操作:

private final Runnable mTask = () -> {

if (mContext != null && mShareService != null) {

mContext.disconnectAbility(mConnection);

mHasPermission = false;

mShareService = null;

}

};

另外,绑定华为分享服务的代码如下:

private void bindShareService() {

if (mShareService != null) {

// 保障仅连一次。

return;

}

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, "start bindShareService.");

Operation operation = new Intent.OperationBuilder().withBundleName(SHARE_PKG_NAME)

.withAction(SHARE_ACTION).withFlags(Intent.FLAG_NOT_OHOS_COMPONENT).build();

Intent intent = new Intent();

intent.setOperation(operation);

mContext.connectAbility(intent, mConnection);

其中,mConnection的定义如下:

// 治理与华为分享的连贯 private final IAbilityConnection mConnection = new IAbilityConnection() {@Override public void onAbilityConnectDone(ElementName elementName,
IRemoteObjectiRemoteObject,int i) {HiLog.error(LABEL_LOG, LOG_FORMAT,TAG,"onAbilityConnectDonesuccess."); mHandler.postTask(()->{mShareService = new HwShareServiceProxy(iRemoteObject); try {mShareService.startAuth(mAppId, mFaCallback); } catch (RemoteException e) {HiLog.error(LABEL_LOG,LOG_FORMAT,TAG,"startAuth error."); }});} @Override public void on AbilityDisconnectDone(ElementName elementName, int i) {HiLog.info(LABEL_LOG,LOG_FORMAT,TAG,"onAbilityDisconnectDone."); mHandler.postTask(()->{mShareService=null;mHasPermission=false;});}};

mShareService.startAuth(mAppId, mFaCallback)是对appId进行验证,验证胜利之后会通过mFaCallback回调。

mFaCallback的代码如下:

private final HwShareCallbackStub mFaCallback = new HwShareCallbackStub("HwShareCallbackStub") {

@Override

public void notifyState(int state) throws RemoteException {

mHandler.postTask(()->{

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, "notifyState: " + state);

if (state == 0) {

mHasPermission = true;

if (mSharePacMap != null) {

shareFaInfo();

}

}

});

}

};

state为0时示意认证通过,能够进行分享。

③ 在MainAbilitySlice.java中,调用连贯华为分享的接口:

ShareAtomicServiceManager.getInstance(this).shareFaInfo("629005930163350400", getPacMap());

"629005930163350400"是appId,每个利用不一样,须要替换成利用本人的appId。getPacMap是获取须要分享的内容封装办法。

private PacMapEx getPacMap() {

PacMapEx pacMap = new PacMapEx();

pacMap.putObjectValue(ShareAtomicServiceManager.SHARING_FA_TYPE, 0);

pacMap.putObjectValue(ShareAtomicServiceManager.HM_BUNDLE_NAME, getBundleName());

pacMap.putObjectValue(
ShareAtomicServiceManager.SHARING_EXTRA_INFO, "原子化服务分享额定内容");

pacMap.putObjectValue(ShareAtomicServiceManager.HM_ABILITY_NAME, MainAbility.class.getName());

pacMap.putObjectValue(
ShareAtomicServiceManager.SHARING_CONTENT_INFO, "原子化服务通过华为分享的内容");

byte[] sharedContentImg = getResourceBytes(ResourceTable.Media_share_conteng_img);

pacMap.putObjectValue(ShareAtomicServiceManager.SHARING_THUMB_DATA, sharedContentImg);

byte[] iconImg = getResourceBytes(ResourceTable.Media_icon);

pacMap.putObjectValue(ShareAtomicServiceManager.HM_FA_ICON, iconImg);

pacMap.putObjectValue(ShareAtomicServiceManager.HM_FA_NAME, getString(ResourceTable.String_app_name));

return pacMap;

}

其中,常量的定义如下:

public static final String HM_FA_ICON = "ohos_fa_icon";

public static final String HM_FA_NAME = "ohos_fa_name";

public static final String HM_ABILITY_NAME = "ohos_ability_name";

public static final String HM_BUNDLE_NAME = "ohos_bundle_name";

public static final String SHARING_FA_TYPE = "sharing_fa_type";

public static final String SHARING_THUMB_DATA = "sharing_fa_thumb_data";

public static final String SHARING_CONTENT_INFO = "sharing_fa_content_info";

public static final String SHARING_EXTRA_INFO = "sharing_fa_extra_info";

常量含意阐明如下:

对于图片资源的解析能够参考如下:

private byte[] getResourceBytes(int resId) {

InputStream resource = null;

ByteArrayOutputStream outStream = null;

try {

resource = getResourceManager().getResource(resId);

outStream = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len;

while ((len = resource.read(buffer)) != -1) {

outStream.write(buffer, 0, len);

}

outStream.close();

resource.close();

return outStream.toByteArray();

} catch (IOException e) {

HiLog.error(TAG, "get resource occurs io exception!");

} catch (NotExistException e) {

HiLog.error(TAG, "it dose not exist!");

} finally {

if (resource != null) {

try {

resource.close();

} catch (IOException e) {

HiLog.error(TAG, "close input stream occurs io exception!");

}

}

if (outStream != null) {

try {

resource.close();

} catch (IOException e) {

HiLog.error(TAG, "close output stream occurs io exception!");

}

}

}

return null;

}

大家也能够参考官网上接入华为分享的开发领导:

https://developer.harmonyos.c...

4.运行工程

在虚拟机或者真机运行创立的工程之后,会显示原子化服务的主界面(即服务界面)。然而在桌面找不到原子化服务图标,因为原子化服务在桌面是没有icon的。能够在服务中心通过搜寻原子化服务的名称找到该原子化服务,将其服务卡片增加到桌面。

原子化服务接入华为分享的运行后果,须要筹备两台HarmonyOS手机,且其系统软件版本不低于HarmonyOS 2。

以上就是本期原子化服务的介绍了,你get到了吗?期待更多的开发者小伙伴们退出咱们,开启您的原子化服务开发之旅哦~