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

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

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

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

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

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

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

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

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


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

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