為萬物互聯而生的HarmonyOS,是怎麼做到跨端開發的?

2021-01-08 電子工程專輯

剛剛過去的2020年底,華為發布了HarmonyOS 2.0手機應用開發者Beta版。對外界,HarmonyOS提出了為萬物互聯而生,讓體驗天生跨端,並且開發跨端應用就像單端一樣簡單。其中,「分布式應用框架」是了解HarmonyOS服務跨端開發最基礎的概念之一。

對於傳統生態——典型如Android,要實現APP在不同設備間的互通,開發者要做的工作很多:是從底層到上層,從通信、數據管理、文件服務到UI的各部分適配和修改。而HarmonyOS將UI以下的基礎服務做了封裝,開發者也因此輕鬆了不少。

HarmonyOS在理念上,就是讓原本孤立的設備,通過「分布式軟總線」串聯起來,並藉由「分布式數據管理」「分布式任務調度」等能力,將所有設備抽象為一個整體,構成虛擬的「超級終端」。數據在超級終端內自由流轉,用戶不需要在意文件或數據究竟在手機、PC還是大屏電視或其他硬體上。各種任務負載,也能由最適合的物理硬體去完成,甚至協同完成。

簡單地說,是用一個HarmonyOS系統來解決IoT所有的問題。與此同時,還能降低跨端開發的難度。HarmonyOS本身隱藏了更多分布式技術的實現細節,包括分布式軟總線、分布式數據管理等技術,都在系統服務層面做了抽象封裝。最終,面向APP開發者的分布式應用框架引入了Ability,Ability就成為理解多端開發的關鍵。

據華為消費者業務軟體部總裁王成錄博士介紹:「Ability相當於鴻蒙應用裡建築材料的最小單元,可以單獨運行在設備上,又可以根據能力的不同,在不同的設備上運行——這個能力,使我們能夠做到一次業務代碼的書寫,就讓應用跑在不同設備上的重要基礎。」

究竟什麼是Ability?

針對不同設備場景的應用開發,HarmonyOS在面向APP開發者時的應用框架層,包括UI編程框架、用戶程序框架、Ability框架,都用於解決包括不同設備的形態差異、能力差異等問題。這三個框架所在的位置如下圖所示:

本文著重談的是其中的Ability框架。從HarmonyOS的開發者文檔來看,Ability是應用所具備能力的抽象。一個應用可以包含多個Ability,且HarmonyOS支持應用以Ability為單位進行部署。Ability也是應用跨端部署的「最小遷移單元」,它可彼此間聯合或單獨部署。

Ability可分為FA(Feature Ability)和PA(Particle Ability)兩種類型。不同類型為開發者提供不同的模板,實現不同的業務功能。不同的FA/PA,完成單一功能用戶程序,基於這樣的用戶程序可在多設備間調度、流轉、可分可合。

FA和PA是由系統統一調度的,可以被第三方程序調用集成。Ability的這種存在方式,就HarmonyOS生態構建來看,實現了功能結構的規範化與調用能力的傻瓜化。從這點來看,華為對於Ability的全局規劃,可能還有更長遠的生態構建目標。

也因此,Ability作為系統統一調度的單位,能夠實現無需安裝就使用,且自動更新;而應用開發的跨設備,則體現在,Ability本身是跨設備流轉的,能夠在不同的設備間接續,以及讓不同設備協同提供服務,也就是分布式技術的基礎。

FA(Feature Ability)的生命周期與邏輯

接下來就來看看FA和PA這兩種Ability更具體的內容。FA(Feature Ability)支持Page Ability,而PA(元服務)則有Service Ability和Data Ability兩種。在config.json註冊文件中註冊Ability時,可通過配置Ability元素中的「type」屬性來指定Ability模板類型。(類似Activity在AndroidManifest.xml中註冊)

首先聊聊FA(Feature Ability):FA當前主要就是Page Ability,提供與用戶交互的能力。一個Page可由一個或多個AbilitySlice構成;AbilitySlice則是指應用的單個頁面及其控制邏輯的總和。這比較類似於Android的Activity及其Fragment組件。

實際上,HarmonyOS中的每個頁面都可以用一個FA來表示。任何一個子頁面都可以用AbilitySlice來表示。嘗試在DevEco Studio創建一個HarmonyOS項目,自動生成的項目會包含一個MainAbility和一個MainAbilitySlice。

MainAbility作用為設置路由,子頁面MainAbilitySlice才真正負責頁面中有哪些組件,每個組件的UI等。AbilitySlice常見使用場景比如頁面有多種布局,需對頁面進行動態布局,每種布局對應一個AbilitySlice;頁面有多個tab,則每個tab對應一個AbilitySlice。比如新聞類APP,可能需要展示新聞列表的一個AbilitySlice,還需要一個展示新聞詳情的AbilitySlice。

上面這張圖是Page Ability的生命周期,其中的生命周期回調有onStart()、onActive()、onInactive()、onBackground()、onForeground()、onStop()。它與Activity對應的某些調用看起來類似,雖然可能並非一一對應的關係。

比如說onStart()在創建Page實例時觸發,且對該實例在其生命周期內僅觸發一次;Page在調用onStart()後進入INACTIVE狀態。這對應到Android開發Activity的onCreat()以及onStart()。交互、失去焦點、不對用戶可見、重回前臺、銷毀等狀態,分別對應了不同的回調。這裡不再詳述這幾種不同回調及對應狀態的具體細節,開發者可以查看HarmonyOS開發者文檔來具體了解。

相應的,AbilitySlice與其所屬Page,有著相同的生命周期狀態和同名回調。不過在同一Page中的AbilitySlice之間發生切換時,AbilitySlice本身表現為獨立於Page的生命周期變化,而Page自身的生命周期狀態不變。

在DevEco Studio建立的MainAbility中也能看到,頁面啟動自動調用onStart(),方法體中再調用setMainRoute(),路由到MainAbilitySlice。在MainAbilitySlice中,除了子頁面啟動時,同樣自動調用onStart(),內部方法體中的setUIContent()是用於設置子頁面UI內容的。UI內容則通過布局文件ability_main.xml來指定。

值得一提的是,Page是可以在同一用戶的不同設備間遷移的,最終做到分布式技術中跨端設備無縫切換的特性。這一點還將在下文詳述。

PA(Particle Ability)又是怎麼回事?

說完FA,接下來就是PA了。PA有兩個能力,即Service Ability和Data Ability,也就是服務、數據。Service Ability提供後臺運行任務的能力(如音樂播放等);Data Ability用於對外部提供統一的數據訪問抽象。這兩者是不提供UI的。

Service Ability可由其他應用或Ability啟動,即使用戶切換到其他應用,Service Ability仍將在後臺繼續運行。整體上和Android的Service有些類似。其生命周期具體如下:

形如前文提到的Page Ability,這裡不再贅述。值得一提的是,在創建一個Empty Service Ability時,更早版本的DevEco Studio嚮導配置會出現「visible」複選框。這個選項用於開發者選擇,該創建的Service是否對其他應用程式可見。最新版本似乎已經去掉了這一選項,不過visible屬性仍可以在config.json註冊文件中自行添加,默認為false,如下圖:

用startAbility()方法可啟動另外一個Ability。另外開發者可也以通過將Intent傳遞給該方法來啟動Service(Intent是對象間傳遞信息的載體,包括這裡的一個Ability啟動另一個Ability,或者前文Page Ability部分提到的AbilitySlice導航到另一個AbilitySlice,Intent指定啟動目標並攜帶相關數據)。不僅是啟動本地Service,也支持啟動遠程Service。

設置目標Service信息,通過DeviceId(設備Id)、BundleName(包名稱)以及AbilityName(待啟動的Ability名稱)的Operation對象進行。遠程Service的啟動,就要求前面提到的visible屬性為true。啟動遠程Service代碼示例:

除此之外,如果Service要與其他Service Ability,或者Page Ability交互,需要創建用於連接的Connection,通過connectAbility()就能連接了。具體內容可參加HarmonyOS的開發者文檔。

最後再來談談Data Ability。這個能力用來進行應用管理自身,以及其他應用存儲數據的訪問,並且提供和其他應用共享數據的方法。具體來說,Data既能用於同設備不同應用的數據共享,也支持跨設備不同應用的數據共享。看起來這應該就是HarmonyOS分布式數據管理的重要組成部分了。

具體的數據可以是資料庫也可以是儲存的文件。Data提供對數據的增、刪、改、查、打開文件等接口。這些數據的標識是通過URI地址進行的,格式如下:

創建Data Ability時,和Service一樣也有visible屬性可設置,用於明確是否允許其他應用訪問該Data。從註冊文件config.json中自動生成的代碼裡可以看到提供給外部訪問的URI,以及訪問該Data Ability時需要申請的訪問權限——這個權限應該是可以自定義的:

文件存儲和資料庫存儲的過程和方法,這裡不再多做介紹。而除了Data的創建,在Data的訪問上,通過DataAbilityHelper類即可訪問共享數據,可以是當前應用的,也可以是其他應用提供的。其中針對資料庫的Data創建和訪問,涉及到一系列的方法,具體的操作參見HarmonyOS開發者文檔,基本也是一看就明白的。

Ability怎麼做跨端開發?

上面這些內容基本就把Ability的基本邏輯梳理清楚了,對邏輯有個大致概念後,具體開發就比較簡單的。不過更多人關心的,應該是用Ability如何做分布式跨端開發。

前文有關FA、PA的介紹中,多多少少也都談到了遠程或者跨端Ability切換或訪問。以Page Ability為例,前文就提到了跨設備遷移的問題,即將Page在同一用戶的不同設備間遷移。

王成錄博士在談京東直播購物跨端功能開發時,提到的實際上就是Page的遷移。當時王成錄博士說:「基於編程框架,一個人一天就能做這樣一個很好的應用體驗。對開發者而言,四條語句,調幾個函數,就能完成這樣的功能了。」

上面這張PPT包含的幾個步驟主要是,從設備A上的Page請求遷移;HarmonyOS處理遷移任務,並回調設備A上Page的保存數據方法,用於保存遷移必須的數據;最終HarmonyOS在設備B上啟動同一個Page,並回調其恢復數據方法。

這種形式的遷移,本質上屬於HarmonyOS中的「分布式任務調度平臺」。這個平臺可對多設備構成的超級終端提供統一的組件管理能力,為應用定義統一的能力基線、接口形式、數據結構、服務描述語言,以屏蔽應差異;支持遠程啟動、遠程調用、業務無縫遷移等分布式任務。

這套操作實現的,就是Ability跨設備的啟動/關閉、連接/斷開連接,以及遷移能力。不僅是Page,各種Ability的跨設備操作還另外有其設定。總結分布式開發的本質,對開發者而言也就是Ability自由調度、流轉、可分可合的邏輯。

在HarmonyOS 2.0手機應用開發者Beta發布活動上,華為還以暢連通話功能為例,提到了FA/PA設計案例。這項功能按特性總共拆分為5個FA、6個PA。PA的拆分原則為可復用/替換,基於設備間能力存在差異的考慮,以及可以跨設備調用。

經過上面的分析,這張列出FA與PA設計的架構圖應該就相當易於理解了。而Ability的存在,一方面顯得直觀,另一方面我們認為其核心還是在於針對分布式、跨端開發的簡單和友好:跨端開發過程,就和本地開發差不多,而且不需要涉及到往下(包括通訊)的層級。所以Ability才是HarmonyOS分布式技術存在的基礎,而華為在Ability的具體實現上應該是投入了海量精力的。

本文從HarmonyOS整體框架切入,對HarmonyOS中的「Ability」定義及工作原理進行了詮釋,旨在幫忙廣大開發者們進一步理解HarmonyOS核心特性的原理所在,可以說Ability是HarmonyOS入口多樣性以及生態開放性的基因所在,筆者相信自帶這樣基因的HarmonyOS在萬物互聯的時代,定會為應開發者們帶來更為廣闊的跨端交互創新空間。也正是這一系列分布式技術,為應用帶來了更多入口、更好體驗。

責編:Yvonne Geng

相關焦點

  • 華為發布HarmonyOS 2.0手機應用開發者Beta版 打造全場景的智能化...
    然而,面對作業系統的碎片化困局,單一應用的跨端擴展存在大量重複性工作,不同尺寸屏幕交互適配困難,嚴重製約了產業蓬勃發展,成為萬物互聯時代業務創新的阻礙。而HarmonyOS為萬物互聯而生,不僅為消費者帶來更好的全場景體驗,更為應用夥伴帶來更多入口。在HarmonyOS的加持下,上億家居設備成為購物的入口,百萬輛車成為影音娛樂的入口,更多智能設備成為支付的入口。
  • 華為HarmonyOS能否打開一片天?
    押注的關鍵,還是萬物互聯   雖說是 HarmonyOS 2.0 手機開發者 Beta 版本發布活動,但王成錄重點講的仍是 IoT 的願景,開場半天其實說的是智慧型手機發展乏力的問題。因此,華為希望用一套系統打通所有 IoT 設備,採用分布式的開發框架,最大限度實現在每個孤立設備上的運行互通。 「希望能夠成為開啟萬物互聯的時代的一把鑰匙。」 王成錄說。對於開發者來說,HarmonyOS 關鍵的抓手是 「跨端」 和 「入口」,讓開發者無需再為不同設備做重複開發,也不用擔心不同屏幕和交互適配困難。
  • 首屆HarmonyOS開發者創新大賽正式啟動 一起創造無限可能
    12月16日,以「一起創造無限可能」為主題的「HarmonyOS開發者創新大賽」正式啟動。本次大賽自12月16日起開啟報名,將持續至2021年5月15日結束,致力於挖掘優秀的應用創新人才及項目,通過學習HarmonyOS,創造性開發出具有全新體驗、全新交互的跨終端應用,並為其連結相關生態資源,加速HarmonyOS創新應用落地。
  • 【年度巨獻】@開發者,你要的HarmonyOS精神大餐,來啦~(下)
    具體內容可查看官網安全說明文檔 ↓↓↓安全說明文檔:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/harmonyos-security-0000000000011934 Q2:
  • 2020徵文-TV#鴻蒙應用開發TV-HelloWord (一)
    2020徵文-TV#鴻蒙應用開發TV-HelloWord (一) DevEco Studio和Android Studio都是基於IntelliJ IDEA開發的,那麼對於開發過Android設備的同學,使用DevEco Studio開發就會簡單的很多,包括設置,模擬器位置,功能菜單,
  • 鴻蒙生態負責人歐建深、首批體驗工程師帶你從零開發Harmony OS...
    2020年9月15日,鴻蒙OS正式發布5天後,7位首批鴻蒙體驗工程師大咖為你帶來HarmonyOS系統特性,硬體開發,內核和發展前景,對- HarmonyOS系統開發者生態的一些問題進行了回答。zMGednc jf_2373602114:33:50zMGednc 韋東山老師 14:33:50zMGednc 可以在linux下開發,在windows也有idezMGednc 怎麼是重複播放
  • 潤和軟體:公司為華為提供HarmonyOS 2.0的三款開發套件
    公司回答表示,公司以既有的晶片與終端設備開發、人工智慧、雲計算、大數據等技術能力為基礎,打通了從端到雲、從底層技術到上層應用的IoT解決方案所需的全棧技術能力,具備了綜合的軟硬體一體化的智能物聯網解決方案開發與服務能力,建立了完整的預研-設計-開發-測試的技術及實施體系,並擁有多款信創產品。
  • 讓產品開發周期縮短70%,賽普拉斯IoT-AdvantEdge是如何做到的?
    這不僅使得英飛凌成功躋身全球十大半導體製造商,同時,也為賽普拉斯在物聯網方面的應用落地提供了更為廣闊的平臺。目前,隨著物聯網的進一步發展,萬物互聯的概念已經逐步成為現實。據Statista預測,到2020年,消費領域使用的物聯網傳感器和設備將接達到 130億個。但萬物互聯必然將產生海量的數據,而數據量的增長,也會帶來一系列問題。
  • 天地不仁以萬物為芻狗
    誰是異端,誰是正見,本來便是各個思想上主觀的認定,也無足為怪。但老子在文言字句上,確是直截了當地說:「天地不仁,以萬物為芻狗。聖人不仁,以百姓為芻狗。」文從字順,難道這不是尖刻諷刺的語意嗎?其實,並非如此,未必盡然。為了說明其中的道理,必須先對本文中兩個名辭的內涵作個交代。一是「芻狗」,一是「仁」。「芻狗」,是草扎的狗,當然不是真的狗。
  • 一個人的「雲開發」
    通過雲開發,騰訊為企業提供了「一攬子」Serverless化的後端資源和服務,幫助他們以更低的技術門檻和成本調用騰訊體系內的積累,在微信和騰訊雲聯合打造的雲開發平臺上開發產品,滿足企業產品研發、運營推廣和成本經營各個環節的需求,藉助騰訊的渠道為消費者提供服務。
  • 鴻蒙系統新進展,解讀HarmonyOS 2.0手機開發者beta版的變化
    當以手機為中心時,智能攝像頭可以是手機的攝像頭,4K電視成為手機的虛擬屏幕,車載GPS也成為手機的定位能力,運動手錶則成為手機的外置生物特徵傳感器。aoMEETC-電子工程專輯其二是「新交互」,基於所有設備的連接,開發的業務「展現出新的交互模式」,「人可以選擇最方便的交互模式,用最人性化的交互模式來交互。
  • 如何才能把棋牌遊戲開發做到專業?
    那麼如何才能把棋牌遊戲開發做到專業?紅鼎遊戲多年實踐經驗得出有兩點一定要注意。做好市場預熱人們在進行棋牌遊戲開發的過程中,正確的做好對整個市場的預熱工作,並且把各個方面的事情都考慮得更加的清楚,那麼對於我們大家來說很關鍵。當你能夠把整個的預熱方面的工作做得很好,有更多的人知道,這裡將會有一些遊戲進行開發,那麼對於我們來說都會更有保障。
  • 2020徵文-TV10分鐘鴻蒙應用實戰開發:鴻蒙手繪板 (含原始碼)
    本篇旨在通過實踐一些樣例,讓開發者們快速提高腎上腺素,歡樂的加入鴻蒙應用開發之旅。整篇就是一個完整的實操樣例,我也儘量在一片中把內容都講清楚。基礎的一些知識點,可以訪問我另一個系列:《鴻蒙OS應用開發實踐》正文(一)創建項目1.創建一個新的TV項目:
  • Fit健身APP聯手HarmonyOS,升級在線健身體驗
    另一方面,Fit也希望通過這種合作來嘗試全新的生態,為團隊帶來更多學習進步的空間。這也是Fit這一決策背後的另一個主要原因。 談到Fit與HarmonyOS攜手為消費者帶來的創新體驗,陶老師舉了一個例子: "我們首先在華為的HarmonyOS手錶上進行了深度聯合開發。
  • 華為發布了針對特定手機的HarmonyOS 2.0測試版
    該軟體目前處於測試階段,用戶和開發人員都被邀請試用它。目前支持的手機有:華為P40、P40 Pro、Mate 30(以及5G版本)和Mate 30 Pro(及其5G版本),華為MatePad Pro (Wi-Fi和LTE版本,以及5G版本)也可以安裝新的作業系統。並且安裝了的用戶可以回滾到EMUI 11。