HarmonyOS原子化服務(wù)原理和架構(gòu)分析
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
引言
2021年6月2日晚間,華為在HarmonyOS 2系統(tǒng)及全場景新品發(fā)布會(huì)上正式推出了服務(wù)卡片,顛覆了人們對(duì)APP信息展示的認(rèn)知,引起了行業(yè)內(nèi)的極大關(guān)注,本文是對(duì)HarmonyOS服務(wù)卡片的原理和架構(gòu)的分析。限于當(dāng)前資料有限,文章內(nèi)容難免有錯(cuò)漏,敬請(qǐng)諒解。
1. HarmonyOS服務(wù)卡片簡介
服務(wù)卡片官方定義
服務(wù)卡片(以下簡稱“卡片”)是鴻蒙FA(Feature Ability)的一種界面展示形式,將FA的重要信息或操作前置到卡片,以達(dá)到服務(wù)直達(dá),減少體驗(yàn)層級(jí)目的。
舉例說明什么是服務(wù)卡片
我們以“玩機(jī)技巧”這個(gè)應(yīng)用為例感受服務(wù)卡片帶給我們的價(jià)值。當(dāng)我們用手指按下圖標(biāo)的同時(shí)往上滑,就會(huì)彈出該應(yīng)用的默認(rèn)卡片,點(diǎn)擊卡片右上角的圖釘,就將卡片固定在了桌面上;點(diǎn)擊卡片中的按鈕,可以開始查看玩機(jī)技巧。這樣,通過與卡片進(jìn)行交互,用戶無需打開應(yīng)用,就可以實(shí)現(xiàn)應(yīng)用內(nèi)的部分操作,使用十分便捷。

服務(wù)卡片的價(jià)值
舉一反三,想象一下:
不用打開微信就可以直接運(yùn)行掃一掃、付款碼;
不用打開微博就可以看到最新的熱點(diǎn)信息;
不用打開郵件服務(wù)就可以看到最新的郵件列表;
……
服務(wù)卡片重新打開了應(yīng)用創(chuàng)新的大門,給應(yīng)用帶來了新的業(yè)務(wù)價(jià)值和流量入口。
服務(wù)卡片與原子化服務(wù)是什么關(guān)系?
說起服務(wù)卡片,就不得不提到與之緊密關(guān)聯(lián)的原子化服務(wù)。原子化服務(wù)官方是HarmonyOS 提供的一種面向未來的服務(wù)提供方式,是有獨(dú)立入口的(用戶可通過點(diǎn)擊、碰一碰、掃一掃等方式直接觸發(fā))、免安裝的(無需顯式安裝,由系統(tǒng)程序框架后臺(tái)安裝后即可使用)、可為用戶提供一個(gè)或多個(gè)便捷服務(wù)的用戶程序形態(tài)。服務(wù)卡片是鴻蒙OS原子化服務(wù)的展示方式。原子化服務(wù)是里子,服務(wù)卡片是面子。
服務(wù)卡片應(yīng)用當(dāng)前僅支持部署在HarmonyOS閉源版本上,在鴻蒙開源版本OpenHarmony 2.0上該特性尚未支持。
2. 服務(wù)卡片操作說明
如何查看某個(gè)應(yīng)用的服務(wù)卡片
如果應(yīng)用的圖標(biāo)下方顯示了一條橫線,用手指按下圖標(biāo)的同時(shí)往上滑,就會(huì)彈出該應(yīng)用的默認(rèn)卡片,點(diǎn)擊卡片右上角的圖釘,就將卡片固定在了桌面上;卡片支持點(diǎn)擊交互,用戶無需打開應(yīng)用,就可以實(shí)現(xiàn)應(yīng)用內(nèi)的部分操作。
比如,下圖中的拍照、電話、暢連應(yīng)用都支持服務(wù)卡片特性。

如何查看一個(gè)應(yīng)用的所有卡片?
以“玩機(jī)技巧”這個(gè)應(yīng)用為例,在桌面上長按其圖標(biāo),在彈出的菜單中點(diǎn)擊“服務(wù)卡片”,就顯示出了玩機(jī)技巧這個(gè)應(yīng)用的所有卡片。

如何查看服務(wù)卡片列表?
手指從桌面左下角或右下角向屏幕中心劃出,調(diào)出“我的服務(wù)”,可以看到手機(jī)支持的服務(wù)卡片列表。

3. 服務(wù)卡片原理分析
通過上面的介紹,我們對(duì)服務(wù)卡片有了大致的了解。那么服務(wù)卡片本質(zhì)上到底是什么,它是類似微信小程序的應(yīng)用嗎?它和目前市面上的哪類應(yīng)用是類似的?區(qū)別又在哪里?
要回答上述問題,我們把業(yè)界出現(xiàn)的典型應(yīng)用類型和典型代表簡單總結(jié)一下:
下面重點(diǎn)介紹一下微信小程序、快應(yīng)用、widget。
微信小程序
微信小程序于2017年1月9日凌晨正式上線。微信小程序是一種不需要下載安裝即可使用的應(yīng)用,它實(shí)現(xiàn)了應(yīng)用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應(yīng)用。也體現(xiàn)了“用完即走”的理念,用戶不用關(guān)心是否安裝太多應(yīng)用的問題。
微信小程序的框架包含兩部分View視圖層、App Service邏輯層,View層用來渲染頁面結(jié)構(gòu),AppService層用來邏輯處理、數(shù)據(jù)請(qǐng)求、接口調(diào)用,它們?cè)趦蓚€(gè)線程里運(yùn)行。視圖層使用WebView渲染,邏輯層使用JSCore運(yùn)行。視圖層和邏輯層通過系統(tǒng)層的JSBridage進(jìn)行通信,邏輯層把數(shù)據(jù)變化通知到視圖層,觸發(fā)視圖層頁面更新,視圖層把觸發(fā)的事件通知到邏輯層進(jìn)行業(yè)務(wù)處理。

快應(yīng)用
快應(yīng)用是九大手機(jī)廠商基于硬件平臺(tái)共同推出的新型應(yīng)用生態(tài)。用戶無需下載安裝,即點(diǎn)即用,享受原生應(yīng)用的性能體驗(yàn)。2018年3月20日在北京推出“快應(yīng)用”標(biāo)準(zhǔn)。
“快應(yīng)用”使用前端技術(shù)棧開發(fā),原生渲染,同時(shí)具備H5頁面和原生應(yīng)用的雙重優(yōu)點(diǎn)。
什么是Widget?
Widget的定位其實(shí)相當(dāng)于應(yīng)用程序的擴(kuò)展程序,使用的關(guān)鍵點(diǎn)在于用戶可以在不打開應(yīng)用、無需加載等待的情況下,在屏幕上快速獲取信息甚至進(jìn)行簡單的操作。蘋果多次強(qiáng)調(diào)Widget不是進(jìn)入應(yīng)用的另一種快捷方式,Widget是一種的信息展現(xiàn)方式,用來快速提供展示某些用戶關(guān)心的應(yīng)用程序數(shù)據(jù)。Widget在剛進(jìn)入中國的時(shí)候,沒有通用的譯名,由當(dāng)時(shí)的中搜命名為“微件”。直到這次iOS 14才使用“小組件”的命名。

Widget按照用戶使用場景的不同,可以分為:信息小組件、集合小組件、控件小組件及混合小組件。而iOS 一直將主屏幕的控制放置于控制中心中進(jìn)行交互,因此小組件類型的主要是信息小組件及集合小組件。

Widget 的刷新完全由 WidgetCenter 控制。開發(fā)者無法通過任何 API 去主動(dòng)刷新 Widget 的頁面,只能告知 WidgetCenter,Timeline 需要刷新了。Widget 只能用 SwiftUI 來進(jìn)行開發(fā),確切的說,Widget 的本質(zhì)是一個(gè)隨著時(shí)間線而更新的 SwiftUI 視圖。

widget交互及展示
Widget的UI是無狀態(tài)的,它不支持播放動(dòng)畫gif、視頻,不支持滾動(dòng),不支持主動(dòng)刷新視圖,唯一支持的只有用戶點(diǎn)擊和DeepLink喚起主app。
綜合對(duì)比相關(guān)特性能力,鴻蒙卡片服務(wù)更像是對(duì)標(biāo)widget的應(yīng)用形態(tài)。鴻蒙服務(wù)卡片的英文名為service widget,也從側(cè)面印證了這個(gè)觀點(diǎn)。
4. 服務(wù)卡片特征
鴻蒙OS服務(wù)卡片有三大特征。
1) 隨處可及
- 服務(wù)發(fā)現(xiàn):原子化服務(wù)可在服務(wù)中心發(fā)現(xiàn)并使用。
- 智能推薦:原子化服務(wù)可以基于合適場景被主動(dòng)推薦給用戶使用;用戶可在服務(wù)中心和小藝建議中發(fā)現(xiàn)系統(tǒng)推薦的服務(wù)。
2) 服務(wù)直達(dá)
- 原子化服務(wù)支持免安裝使用。
- 服務(wù)卡片:支持用戶無需打開原子化服務(wù)便可獲取服務(wù)內(nèi)重要信息的展示和動(dòng)態(tài)變化,如天氣、關(guān)鍵事務(wù)備忘、熱點(diǎn)新聞列表。
3) 跨設(shè)備
- 原子化服務(wù)支持運(yùn)行在1+8+N設(shè)備上,如手機(jī)、平板等設(shè)備。
- 支持跨設(shè)備分享:例如接入華為分享后,用戶可分享原子化服務(wù)給好友,好友確認(rèn)后打開分享的服務(wù)。
- 支持跨端遷移:例如手機(jī)上未完成的郵件,遷移到平板繼續(xù)編輯。
- 支持多端協(xié)同:例如手機(jī)用作文檔翻頁和批注,配合智慧屏顯示完成分布式辦公;手機(jī)作為手柄,與智慧屏配合玩游戲。
根據(jù)以上官方宣傳可見,基于鴻蒙分布式能力,鴻蒙OS在widget的基礎(chǔ)上新增了跨設(shè)備能力,賦予了widget新的生命力。
當(dāng)用戶跨設(shè)備進(jìn)行流轉(zhuǎn)和分享業(yè)務(wù)時(shí),被流轉(zhuǎn)到的設(shè)備不用預(yù)先安裝應(yīng)用,極大增強(qiáng)了服務(wù)卡片的適用場景和價(jià)值。
5. 原子化服務(wù)架構(gòu)
關(guān)于鴻蒙OS原子化服務(wù)的架構(gòu)有2張圖可以參考。


基本概念
- 卡片使用方
顯示卡片內(nèi)容的宿主應(yīng)用,控制卡片在宿主中展示的位置。
- 卡片管理服務(wù)
用于管理系統(tǒng)中所添加卡片的常駐代理服務(wù),包括卡片對(duì)象的管理與使用,以及卡片周期性刷新等。
- 卡片提供方
提供卡片顯示內(nèi)容的HarmonyOS應(yīng)用或原子化服務(wù),控制卡片的顯示內(nèi)容、控件布局以及控件點(diǎn)擊事件。
說明:
卡片使用方和提供方不要求常駐運(yùn)行,在需要添加/刪除/請(qǐng)求更新卡片時(shí),卡片管理服務(wù)會(huì)拉起卡片提供方獲取卡片信息。
卡片管理服務(wù)包含以下模塊:
- 周期性刷新:在卡片添加后,根據(jù)卡片的刷新策略啟動(dòng)定時(shí)任務(wù)周期性觸發(fā)卡片的刷新。
- 卡片緩存管理:在卡片添加到卡片管理服務(wù)后,對(duì)卡片的視圖信息進(jìn)行緩存,以便下次獲取卡片時(shí)可以直接返回緩存數(shù)據(jù),降低時(shí)延。
- 卡片生命周期管理:對(duì)于卡片切換到后臺(tái)或者被遮擋時(shí),暫??ㄆ乃⑿?以及卡片的升級(jí)/卸載場景下對(duì)卡片數(shù)據(jù)的更新和清理。
- 卡片使用方對(duì)象管理:對(duì)卡片使用方的RPC對(duì)象進(jìn)行管理,用于使用方請(qǐng)求進(jìn)行校驗(yàn)以及對(duì)卡片更新后的回調(diào)處理。
- 通信適配層:負(fù)責(zé)與卡片使用方和提供方進(jìn)行RPC通信。
卡片提供方包含以下模塊:
- 卡片服務(wù):由卡片提供方開發(fā)者實(shí)現(xiàn),開發(fā)者實(shí)現(xiàn)onCreateForm、onUpdateForm和onDeleteForm處理創(chuàng)建卡片、更新卡片以及刪除卡片等請(qǐng)求,提供相應(yīng)的卡片服務(wù)。
- 卡片提供方實(shí)例管理模塊:由卡片提供方開發(fā)者實(shí)現(xiàn),負(fù)責(zé)對(duì)卡片管理服務(wù)分配的卡片實(shí)例進(jìn)行持久化管理。
- 通信適配層:由HarmonyOS SDK提供,負(fù)責(zé)與卡片管理服務(wù)通信,用于將卡片的更新數(shù)據(jù)主動(dòng)推送到卡片管理服務(wù)。
根據(jù)以上架構(gòu)描述,個(gè)人分析和推理的內(nèi)容如下。
服務(wù)卡片如何做到跨設(shè)備流轉(zhuǎn)和分享時(shí)不用預(yù)先安裝應(yīng)用?
鴻蒙OS原子化服務(wù)采用卡片使用方和卡片提供方分離的架構(gòu),卡片使用方和卡片提供方可以在相同的或不同的設(shè)備上。如果在不同的設(shè)備進(jìn)行流轉(zhuǎn),通過RPC通信,鴻蒙OS可以實(shí)現(xiàn)跨設(shè)備流轉(zhuǎn)和分享能力,并且接收方不用預(yù)先安裝應(yīng)用。
同時(shí),對(duì)于卡片提供方離線的風(fēng)險(xiǎn),鴻蒙OS通過在架構(gòu)上支持卡片管理服務(wù)的緩存機(jī)制也進(jìn)行了有效應(yīng)對(duì)。
其他設(shè)計(jì)討論
目前尚不清楚原子化服務(wù)定時(shí)刷新模塊的實(shí)現(xiàn)原理,不知道是否和iOS widget相同,由系統(tǒng)統(tǒng)一調(diào)度刷新,從而提高整機(jī)刷新性能。
當(dāng)卡片使用方和卡片提供方在同一臺(tái)終端上時(shí),從架構(gòu)上看,似乎可以優(yōu)化為直接通信不經(jīng)過卡片管理服務(wù)的方式,中間減少一個(gè)環(huán)節(jié),避免性能損耗。
6. 原子化服務(wù)未來展望
我們從ios14 widget的特性對(duì)比分析一下,鴻蒙OS服務(wù)卡片未來可能會(huì)推出哪些功能。
1) 配置功能
用戶可以根據(jù)自己的偏好配置。以天氣類組件為例,有些用戶可能關(guān)心的是晴天、雨天、溫度等信息,有些用戶可能只關(guān)心PM2.5的信息,由于小組件的顯示空間有限,有時(shí)候你無法將所有的信息都展示在組件內(nèi),因此讓用戶選擇他感興趣的信息進(jìn)行小組件的配置是非常重要的特性。
2) 類似Smart Stack功能
iOS widget具有智能堆棧 Smart Stack能力 ,集成siri的智能化推薦能力,能根據(jù)你使用時(shí)間,位置等因素,來智能顯示組件。比如,早上起床顯示天氣信息;到達(dá)辦公室顯示微信新消息信息;晚上下班顯示路線擁堵情況等。目前鴻蒙OS實(shí)現(xiàn)了小藝建議,但是小藝建議推薦的是應(yīng)用列表,不是服務(wù)卡片的輪流展示能力。
3) 展開和折疊功能
服務(wù)卡片的展開和折疊能力,對(duì)于列表類的服務(wù)卡片顯得尤為重要,折疊時(shí)可以節(jié)省桌面空間,對(duì)于部分對(duì)空間敏感的人群特別適用。
7. 原子化服務(wù)實(shí)例
大家可以參考華為codelab,進(jìn)行原子化服務(wù)的應(yīng)用開發(fā):
時(shí)鐘FA卡片開發(fā)樣例
https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/Clock-Card

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)