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

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

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

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

3. 服務卡片原理分析
通過上面的介紹,我們對服務卡片有了大致的了解。那么服務卡片本質上到底是什么,它是類似微信小程序的應用嗎?它和目前市面上的哪類應用是類似的?區別又在哪里?
要回答上述問題,我們把業界出現的典型應用類型和典型代表簡單總結一下:
下面重點介紹一下微信小程序、快應用、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
