- 鴻蒙操作系統設計原理與架構
- 李毅 任革林
- 2015字
- 2024-07-24 11:18:11
2.3.2 “一次開發,多端部署”的用戶程序開發體驗
原子化服務的一個關鍵特征是跨端運行,但不同終端之間的差異很大,如系統能力不同導致API集合不同,屏幕尺寸不一致,屏幕分辨率和縱橫比有較大差異,內存大小及CPU處理能力都不盡相同。如何實現跨端運行原子化服務?如果讓用戶程序開發者自己完成跨端能力的開發,即使對于高級用戶程序開發者也顯得過于苛刻,更不必說對于大多數普通開發者了。所以,HarmonyOS在系統層面提供了一套開發和運行環境,讓用戶程序開發者很方便地就能開發出跨端運行的原子化服務,這就顯得非常迫切和必要。
為了實現“一次開發,多端部署”,系統至少需要解決3個問題。
● 第一個問題是GUI的自適應問題,即超百種不同分辨率和不同尺寸的屏幕的適配問題,以及橫屏、豎屏、劉海屏、圓形屏、折疊屏等各種異形屏幕的適配問題。
● 第二個問題是統一交互問題。不同終端的輸入方式通常差異很大,譬如可能通過語音、觸摸、表冠、鍵盤、鼠標、手寫筆等輸入,需要系統對不同輸入方式進行統一處理。
● 第三個問題是不同設備的軟硬件能力差異問題。
要解決這些問題,最核心的方案就是要實現用戶程序與具體設備的解耦,把具體設備和用戶程序結構抽象化,“一次開發,多端部署”的實現原理如圖2-5所示。對GUI來講,系統需要對物理屏幕和GUI信息結構分別進行抽象;對統一輸入來講,系統需要對設備的輸入事件進行歸一化抽象;對硬件能力的差異來講,系統需要對硬件的能力集進行抽象。需要強調的一點是,原子化服務不管運行的物理設備的GUI如何變化,它要完成的核心業務能力是一致的,不會隨GUI的變化而變化。而且前文提到用戶在不同設備上通過用戶程序可以訪問同一用戶數據,而不感知數據具體存儲在哪臺設備上,這就要求HarmonyOS的原子化服務的基本設計邏輯必須實現“GUI—業務邏輯—數據”的3層解耦。

圖2-5 “一次開發,多端部署”的實現原理
1. 多設備顯示差異
武術家李小龍曾說過:“當你把水倒入杯子的時候,水就變成了杯子的樣子;當你把水倒入瓶子的時候,水就變成了瓶子的樣子;當你把水倒入茶壺的時候,水就變成了茶壺的樣子。”自適應布局就是要我們把要顯示的信息想象成水,把屏幕想象成一個玻璃容器。如果要顯示的信息只有大小一致的文字,它就像水一樣,可以很好地填滿各種尺寸的屏幕。如果要顯示的信息的文字大小不一致,或者包含圖像、表格等其他非文字信息,該如何布局呢?HarmonyOS的解決方案是在GUI設計和開發層面提供多種響應式布局方案,即通過對屏幕進行柵格化抽象來提供不同屏幕的界面適配能力。不同設備屏幕的柵格化如圖2-6所示。

注:1 inch=2.54 cm;vp即virtual pixel,虛擬像素。
圖2-6 不同設備屏幕的柵格化
圖2-7給出了設備屏幕柵格化后的GUI布局示例。

圖2-7 設備屏幕柵格化后的GUI布局示例
可以通過改變元素的相對位置來適應環境的變化。圖2-8列舉了改變相對位置的5種自適應布局能力。

圖2-8 改變相對位置的5種自適應布局能力
也可以通過改變元素自身尺寸來適應環境的變化。圖2-9列舉了改變自身尺寸的2種自適應布局能力。

圖2-9 改變自身尺寸的2種自適應布局能力
通過上述布局能力的組合,可以屏蔽不同設備屏幕的顯示差異,帶給開發者統一的GUI設計體驗。下面通過一個具體的例子來展現如何綜合運用上述布局能力實現自適應布局,如圖2-10所示。

圖2-10 自適應布局的示例說明
2. 多設備交互差異
如何對多設備的輸入事件進行歸一化?以縮放交互為例,在單設備場景下,譬如在手機觸摸屏上,用戶通過多指觸控完成縮放動作,而在分布式場景下,縮放交互有多種不同的輸入方式,那么,如何讓用戶程序更好地支持這些交互?
首先需要完成縮放交互的規則設計,如表2-1所示。
表2-1 縮放交互的規則設計

然后通過構建的交互事件歸一化框架,提煉出“縮放”這一抽象事件。縮放控件只處理縮放事件,不再對鼠標、鍵盤、觸摸屏等設備上發生的物理事件進行處理。縮放控件的處理流程如圖2-11所示。

圖2-11 縮放控件的處理流程
最后建立交互事件歸一化框架,完成事件歸一化處理,如圖2-12所示。

圖2-12 交互事件歸一化框架原理
3. 多設備能力差異
多設備能力差異主要表現為設備內存、主頻差異大,硬件平臺能力差異大。操作系統為了適配不同設備,需要對能力進行裁剪,無法確保所有設備的系統能力一致,用戶程序開發難以實現統一開發、統一運行。為了解決這個問題,HarmonyOS提供應用層統一的開發范式,如圖2-13所示,支持用戶程序在不同內存設備上部署運行。

圖2-13 統一的開發范式
需要指出的是,如果用戶程序依賴差異化能力,用戶程序需要感知當前運行的設備的具體能力,這就要求用戶程序能夠根據當前設備的特定能力進行相關的業務分支處理。例如,當某一設備具備GPS精準定位能力時,用戶程序可以按照用戶當前所處的具體位置為用戶推薦業務;當該設備不具備GPS精準定位能力,而具備粗粒度的網絡定位能力時,用戶程序可以按距離用戶位置的遠近為用戶推薦業務;當該設備不具備定位能力時,則不向用戶推薦業務。HarmonyOS通過SystemCapability對設備能力進行抽象描述,用戶程序可以通過相關API來查詢當前設備是否支持某一能力,如圖2-14所示。

圖2-14 通過SystemCapability對設備能力進行抽象描述
- Linux設備驅動開發詳解(第2版)
- 阿里云數字新基建系列:云原生操作系統Kubernetes
- Moodle 3.x Teaching Techniques(Third Edition)
- 奔跑吧 Linux內核(入門篇)
- Mobile First Design with HTML5 and CSS3
- 完美應用RHEL 8
- 新編電腦辦公(Windows 10+ Office 2013版)從入門到精通
- Linux內核修煉之道
- Java EE 8 High Performance
- 鴻蒙HarmonyOS應用開發入門
- 電腦辦公(Windows 7+Office 2016)入門與提高
- Microsoft DirectAccess Best Practices and Troubleshooting
- SQL Server on Azure Virtual Machines
- 數字系統設計與VHDL
- Raspberry Pi Networking Cookbook