HarmonyOS新能力讓數據多端協同更便捷,數據跨端遷移更高效!

作者:yijian,終端OS分佈式文件系統專家;gongashi,終端OS分佈式數據管理專家

HarmonyOS作為分佈式操作系統,其分佈式數據管理能力非常重要。我們也一直圍繞持續為開發者帶來全局「一份」數據的開發體驗的目標,在不斷增強和提升HarmonyOS的分佈式數據管理能力。本期我們就來為大家詳細介紹分佈式數據管理的新能力。

 

一、分佈式數據管理平檯面臨的挑戰

我們先來看一個典型的分佈式場景:

 

手機和智慧屏協同進行文檔演示,手機上的文檔演示狀態(比如翻頁、頁面放大、頁面縮小和塗鴉等)需要同步到智慧屏,同樣智慧屏上的文檔演示狀態也需要同步到手機上。

 

圖1 分佈式文檔演示場景

 

要實現以上場景,開發者面臨以下兩個挑戰:

挑戰1:如何更便捷地實現數據的「多端協同」?

手機上的文檔演示狀態同步到智慧屏上,智慧屏上的文檔演示狀態也同步到手機上,這其實就是數據的「多端協同」。要實現數據的「多端協同」,需要開發者完成消息處理邏輯,包括:建立通信鏈接、消息收發處理、錯誤處理和性能調優等,工作量非常大。此外,設備越多,調試複雜度將呈指數增長。

挑戰2:如何更高效地實現數據的「跨端遷移」?

手機和智慧屏協同進行文檔演示時,手機上的文檔要發送到智慧屏上操作,這就涉及到數據的「跨端遷移」。以往通常的做法是建立兩個設備的通信連接,手機發送文檔給智慧屏,智慧屏接收後打開和修改文檔,再將文檔發回給手機。這種實現方式很複雜,而且文件來回傳輸也非常影響用戶的操作效率。

 

二、分佈式數據管理平台

 

面對上面兩個挑戰,HarmonyOS的解決辦法是:在分佈式數據管理平台提供全局訪問框架和分享框架,來支撐開發者在訪問、遷移、協同、分享等分佈式場景下的業務創新。

 

圖2 分佈式數據管理平台

圖2中,全局訪問框架和分享框架中的數據庫,在HarmonyOS 2就已經發佈了,我們也在往期推文中介紹過,本期不再贅述。全局訪問框架和分享框架中標黃的「變量」和「文件」是即將在HarmonyOS新版本中發佈的內容,接下來為大家詳細介紹。

 

三、變量的全局訪問

對於挑戰1,為了更便捷地實現數據的「多端協同」,HarmonyOS提供了變量的全局訪問框架。

 

上面分佈式文檔演示場景中,文檔演示狀態(比如翻頁、頁面放大、頁面縮小和塗鴉等)其實就是變量。如果這些變量支持「全局」訪問,那麼開發者跨設備訪問這些變量就能像操作本地變量一樣,數據就能夠自動高效、便捷地多端同步了。為了實現變量的「全局」訪問,HarmonyOS提出了「分佈式數據對象」的概念,將變量封裝成分佈式數據對象。

1.  「分佈式數據對象」的設計理念

分佈式數據對象的設計理念如圖3所示。基於分佈式軟總線能力和分佈式內存數據庫的跨設備同步能力,HarmonyOS構建了基於JS對象(也就是分佈式數據對象)的接口。開發者直接使用此接口就可以實現跨設備的數據同步,無需關注底層通信過程,可以更關注於業務邏輯的開發。

 

圖3 「分佈式數據對象」設計理念

2.  三步使用「分佈式數據對象」

「分佈式數據對象」接口極為簡單、易用,只需要3個步驟:

(1)定義JS對象的時候繼承DistributedDataObject基類

(2)設置objectID、sessionID

(3)訂閱分佈式數據對象的變化(可選)

 

此外,其他與本地對象操作完全一致。

 

「分佈式數據對象」接口的基類、方法和參數說明如下:

 

圖4 「分佈式數據對象」接口說明

下面我們來看看「分佈式數據對象」接口使用的示例代碼。圖5是多端協同發起方的示例代碼,圖6是多端協同接收方的示例代碼。

 

圖5 多端協同發起方的示例代碼

圖6 多端協同接收方的示例代碼

 

四、文件的全局訪問和分享

對於挑戰2,為了更高效地實現數據的「跨端遷移」,HarmonyOS提供了文件的全局訪問框架和分享框架。(為了方便理解,圖7僅展示了分佈式數據管理平台中的文件部分。)

 

圖7 分佈式數據管理平台(文件部分)

如圖7所示,文件訪問框架分為應用文件訪問框架和公共文件訪問框架。

 

HarmonyOS 2已經提供應用文件訪問框架,HarmonyOS即將發佈的新版本中會新增公共文件訪問框架和文件共享框架,增強文件的全局訪問和分享能力,從而實現屏蔽物理存儲位置,達到讓應用可以像訪問本地文件一樣訪問遠端文件的目標。

 

基於新增的公共文件訪問框架和文件共享框架,我們來看看如何實現兩個典型的文件使用場景:

 

1.  直接打開遠端文件

 

場景說明:直接在設備A上打開設備B上的公共文件。

實現說明:開發者將分佈式文件系統接入文件選擇器(File Picker),應用就可以通過分佈式的File Picker直接打開、編輯遠端文件,不需要進行跨設備的文件發送。

實現代碼示例如下:

 

var parameter = {
    「want」: {
        「action」: 「action.com.huawei.filecenter.PICKER_ACITON」
    },
};
featureAbility.startAbilityForResult(parameter, (err, data) => {
………// 可直接打開、編輯遠端文件
})

 

實現效果如圖8所示,用戶在本機上可以選擇遠端設備,可以看到遠端設備上的文件列表,並且能直接打開和編輯遠端文件。

 

圖8 直接打開遠端文件

 

2.  文件的「跨端遷移」

 

場景說明:設備A分享一個公共文件給設備B,在設備B上打開該文件。

實現說明:此場景下,設備A並沒有將文件真的發送給設備B,而是在設備A和設備B之間建立了文件的映射關係,設備B通過此映射關係遠程訪問設備A上的文件。具體實現流程如圖9所示。

 

圖9 文件的「跨端遷移」

 

實現步驟和示例代碼如下:

 

(1)設備A分享文件句柄給設備B。

 

handoffHelper.creator(networkID, fd);

 

(2)設備A和設備B建立文件的映射關係。

 

(3)設備B收到文件分享消息後,響應消息並獲取文件的URI。

 

let helper1 = DataAbilityHelper.creator(getContext());

 

(4)設備B上的應用通過URI打開遠端文件。

 

helper1.openFile(Uri, "rw",  function(fd) {
      …………
})

 

五、結束語

分佈式數據管理平台新增變量和文件的全局訪問框架,以及文件分享框架,幫助開發者更便捷地實現數據的「多端協同」,更高效地實現數據的「跨端遷移」。這些新能力將在HarmonyOS的新版本中體現,敬請期待!

 

HarmonyOS正在不斷成長,期待更多的開發者加入我們,一起見證HarmonyOS的成長!

 

掃碼添加開發者小助手微信

獲取更多HarmonyOS開發資源和開發者活動資訊