HarmonyOS原子化服务原理和架构分析 原创 精华
引言
2021年6月2日晚间,华为在HarmonyOS 2系统及全场景新品发布会上正式推出了服务卡片,颠覆了人们对APP信息展示的认知,引起了行业内的极大关注,本文是对HarmonyOS服务卡片的原理和架构的分析。限于当前资料有限,文章内容难免有错漏,敬请谅解。
1. HarmonyOS服务卡片简介
服务卡片官方定义
服务卡片(以下简称“卡片”)是鸿蒙FA(Feature Ability)的一种界面展示形式,将FA的重要信息或操作前置到卡片,以达到服务直达,减少体验层级目的。
举例说明什么是服务卡片
我们以“玩机技巧”这个应用为例感受服务卡片带给我们的价值。当我们用手指按下图标的同时往上滑,就会弹出该应用的默认卡片,点击卡片右上角的图钉,就将卡片固定在了桌面上;点击卡片中的按钮,可以开始查看玩机技巧。这样,通过与卡片进行交互,用户无需打开应用,就可以实现应用内的部分操作,使用十分便捷。
服务卡片的价值
举一反三,想象一下:
不用打开微信就可以直接运行扫一扫、付款码;
不用打开微博就可以看到最新的热点信息;
不用打开邮件服务就可以看到最新的邮件列表;
……
服务卡片重新打开了应用创新的大门,给应用带来了新的业务价值和流量入口。
服务卡片与原子化服务是什么关系?
说起服务卡片,就不得不提到与之紧密关联的原子化服务。原子化服务官方是HarmonyOS 提供的一种面向未来的服务提供方式,是有独立入口的(用户可通过点击、碰一碰、扫一扫等方式直接触发)、免安装的(无需显式安装,由系统程序框架后台安装后即可使用)、可为用户提供一个或多个便捷服务的用户程序形态。服务卡片是鸿蒙OS原子化服务的展示方式。原子化服务是里子,服务卡片是面子。
服务卡片应用当前仅支持部署在HarmonyOS闭源版本上,在鸿蒙开源版本OpenHarmony 2.0上该特性尚未支持。
2. 服务卡片操作说明
如何查看某个应用的服务卡片
如果应用的图标下方显示了一条横线,用手指按下图标的同时往上滑,就会弹出该应用的默认卡片,点击卡片右上角的图钉,就将卡片固定在了桌面上;卡片支持点击交互,用户无需打开应用,就可以实现应用内的部分操作。
比如,下图中的拍照、电话、畅连应用都支持服务卡片特性。
如何查看一个应用的所有卡片?
以“玩机技巧”这个应用为例,在桌面上长按其图标,在弹出的菜单中点击“服务卡片”,就显示出了玩机技巧这个应用的所有卡片。
如何查看服务卡片列表?
手指从桌面左下角或右下角向屏幕中心划出,调出“我的服务”,可以看到手机支持的服务卡片列表。
3. 服务卡片原理分析
通过上面的介绍,我们对服务卡片有了大致的了解。那么服务卡片本质上到底是什么,它是类似微信小程序的应用吗?它和目前市面上的哪类应用是类似的?区别又在哪里?
要回答上述问题,我们把业界出现的典型应用类型和典型代表简单总结一下:
典型应用 | 技术特征 | 典型代表 |
原生APP | iOS app,android app | |
H5 | ||
混合APP | 原生和H5的混合体 | |
Widget | iOS widget | |
小程序 | Webview渲染 | 微信小程序 |
快应用 | 原生渲染 | |
轻应用 | 具备Webapp的可被检索与智能分发的特性 | 百度轻应用 |
下面重点介绍一下微信小程序、快应用、widget。
微信小程序
微信小程序于2017年1月9日凌晨正式上线。微信小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。
微信小程序的框架包含两部分View视图层、App Service逻辑层,View层用来渲染页面结构,AppService层用来逻辑处理、数据请求、接口调用,它们在两个线程里运行。视图层使用WebView渲染,逻辑层使用JSCore运行。视图层和逻辑层通过系统层的JSBridage进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层把触发的事件通知到逻辑层进行业务处理。
快应用
快应用是九大手机厂商基于硬件平台共同推出的新型应用生态。用户无需下载安装,即点即用,享受原生应用的性能体验。2018年3月20日在北京推出“快应用”标准。
“快应用”使用前端技术栈开发,原生渲染,同时具备H5页面和原生应用的双重优点。
什么是Widget?
Widget的定位其实相当于应用程序的扩展程序,使用的关键点在于用户可以在不打开应用、无需加载等待的情况下,在屏幕上快速获取信息甚至进行简单的操作。苹果多次强调Widget不是进入应用的另一种快捷方式,Widget是一种的信息展现方式,用来快速提供展示某些用户关心的应用程序数据。Widget在刚进入中国的时候,没有通用的译名,由当时的中搜命名为“微件”。直到这次iOS 14才使用“小组件”的命名。
Widget按照用户使用场景的不同,可以分为:信息小组件、集合小组件、控件小组件及混合小组件。而iOS 一直将主屏幕的控制放置于控制中心中进行交互,因此小组件类型的主要是信息小组件及集合小组件。
Widget 的刷新完全由 WidgetCenter 控制。开发者无法通过任何 API 去主动刷新 Widget 的页面,只能告知 WidgetCenter,Timeline 需要刷新了。Widget 只能用 SwiftUI 来进行开发,确切的说,Widget 的本质是一个随着时间线而更新的 SwiftUI 视图。
widget交互及展示
Widget的UI是无状态的,它不支持播放动画gif、视频,不支持滚动,不支持主动刷新视图,唯一支持的只有用户点击和DeepLink唤起主app。
综合对比相关特性能力,鸿蒙卡片服务更像是对标widget的应用形态。鸿蒙服务卡片的英文名为service widget,也从侧面印证了这个观点。
4. 服务卡片特征
鸿蒙OS服务卡片有三大特征。
1) 随处可及
· 服务发现:原子化服务可在服务中心发现并使用。
· 智能推荐:原子化服务可以基于合适场景被主动推荐给用户使用;用户可在服务中心和小艺建议中发现系统推荐的服务。
2) 服务直达
· 原子化服务支持免安装使用。
· 服务卡片:支持用户无需打开原子化服务便可获取服务内重要信息的展示和动态变化,如天气、关键事务备忘、热点新闻列表。
3) 跨设备
· 原子化服务支持运行在1+8+N设备上,如手机、平板等设备。
· 支持跨设备分享:例如接入华为分享后,用户可分享原子化服务给好友,好友确认后打开分享的服务。
· 支持跨端迁移:例如手机上未完成的邮件,迁移到平板继续编辑。
· 支持多端协同:例如手机用作文档翻页和批注,配合智慧屏显示完成分布式办公;手机作为手柄,与智慧屏配合玩游戏。
根据以上官方宣传可见,基于鸿蒙分布式能力,鸿蒙OS在widget的基础上新增了跨设备能力,赋予了widget新的生命力。
当用户跨设备进行流转和分享业务时,被流转到的设备不用预先安装应用,极大增强了服务卡片的适用场景和价值。
5. 原子化服务架构
关于鸿蒙OS原子化服务的架构有2张图可以参考。
基本概念
· 卡片使用方
显示卡片内容的宿主应用,控制卡片在宿主中展示的位置。
· 卡片管理服务
用于管理系统中所添加卡片的常驻代理服务,包括卡片对象的管理与使用,以及卡片周期性刷新等。
· 卡片提供方
提供卡片显示内容的HarmonyOS应用或原子化服务,控制卡片的显示内容、控件布局以及控件点击事件。
说明:
卡片使用方和提供方不要求常驻运行,在需要添加/删除/请求更新卡片时,卡片管理服务会拉起卡片提供方获取卡片信息。
卡片管理服务包含以下模块:
· 周期性刷新:在卡片添加后,根据卡片的刷新策略启动定时任务周期性触发卡片的刷新。
· 卡片缓存管理:在卡片添加到卡片管理服务后,对卡片的视图信息进行缓存,以便下次获取卡片时可以直接返回缓存数据,降低时延。
· 卡片生命周期管理:对于卡片切换到后台或者被遮挡时,暂停卡片的刷新;以及卡片的升级/卸载场景下对卡片数据的更新和清理。
· 卡片使用方对象管理:对卡片使用方的RPC对象进行管理,用于使用方请求进行校验以及对卡片更新后的回调处理。
· 通信适配层:负责与卡片使用方和提供方进行RPC通信。
卡片提供方包含以下模块:
· 卡片服务:由卡片提供方开发者实现,开发者实现onCreateForm、onUpdateForm和onDeleteForm处理创建卡片、更新卡片以及删除卡片等请求,提供相应的卡片服务。
· 卡片提供方实例管理模块:由卡片提供方开发者实现,负责对卡片管理服务分配的卡片实例进行持久化管理。
· 通信适配层:由HarmonyOS SDK提供,负责与卡片管理服务通信,用于将卡片的更新数据主动推送到卡片管理服务。
根据以上架构描述,个人分析和推理的内容如下。
服务卡片如何做到跨设备流转和分享时不用预先安装应用?
鸿蒙OS原子化服务采用卡片使用方和卡片提供方分离的架构,卡片使用方和卡片提供方可以在相同的或不同的设备上。如果在不同的设备进行流转,通过RPC通信,鸿蒙OS可以实现跨设备流转和分享能力,并且接收方不用预先安装应用。
同时,对于卡片提供方离线的风险,鸿蒙OS通过在架构上支持卡片管理服务的缓存机制也进行了有效应对。
其他设计讨论
目前尚不清楚原子化服务定时刷新模块的实现原理,不知道是否和iOS widget相同,由系统统一调度刷新,从而提高整机刷新性能。
当卡片使用方和卡片提供方在同一台终端上时,从架构上看,似乎可以优化为直接通信不经过卡片管理服务的方式,中间减少一个环节,避免性能损耗。
6. 原子化服务未来展望
我们从ios14 widget的特性对比分析一下,鸿蒙OS服务卡片未来可能会推出哪些功能。
1) 配置功能
用户可以根据自己的偏好配置。以天气类组件为例,有些用户可能关心的是晴天、雨天、温度等信息,有些用户可能只关心PM2.5的信息,由于小组件的显示空间有限,有时候你无法将所有的信息都展示在组件内,因此让用户选择他感兴趣的信息进行小组件的配置是非常重要的特性。
2) 类似Smart Stack功能
iOS widget具有智能堆栈 Smart Stack能力 ,集成siri的智能化推荐能力,能根据你使用时间,位置等因素,来智能显示组件。比如,早上起床显示天气信息;到达办公室显示微信新消息信息;晚上下班显示路线拥堵情况等。目前鸿蒙OS实现了小艺建议,但是小艺建议推荐的是应用列表,不是服务卡片的轮流展示能力。
3) 展开和折叠功能
服务卡片的展开和折叠能力,对于列表类的服务卡片显得尤为重要,折叠时可以节省桌面空间,对于部分对空间敏感的人群特别适用。
7. 原子化服务实例
大家可以参考华为codelab,进行原子化服务的应用开发:
时钟FA卡片开发样例
https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/Clock-Card
赞,很全面的讲解
建议所有有开发卡片计划的团队先好好读一下,理清了思路,开发起来才能击中用户痛点
我们的鸿蒙系统应有一种纵线转横线的三棱锥体推送机制,在三棱锥体中假设其中任何一条线为纵线那么就一定会有一条直线与其垂直,并且有且仅有一条,假设多辆不同宽度的车辆行走在其中,那么这些车辆就会由于不同的宽度,就会行走在不同的空间平面以及不用的高度互不干扰
原子化服务跟服务卡片是属于同一类型的两种展现形式,原子化服务是将你的应用以服务的方式运行在手机上,它不会显示你安装的应用的图标。服务卡片则是在手机上安装一个应用程序,在这个应用程序中可以操作一些功能。
围观闫老师大作!!
希望我们的鸿蒙系统有三棱锥和三棱柱的推送机制和推送通道,希望系统的各种功能模块位置排列可以和各种芯片的功能模块的位置排列相对应,起到遥相呼应的作用
https://harmonyos-m.51cto.com/posts/7194