博客 / 詳情

返回

鴻蒙人物誌 x 秦駿:從分佈式能力到用户體驗

前言

當前,多數智能家居設備在基礎硬件性能上已能滿足日常需求,但用户的實際體驗並未因此變得順暢。在手機上選好菜譜後,仍需切換應用啓動烤箱;稱重完成的數據無法自動流轉到下一環節;想把烹飪畫面投到大屏,常常要經歷繁瑣的配對操作……設備數量增加,反而讓操作更加分散,智能停留在單品層面,難以真正提升整體體驗。
在秦駿和團隊看來,這並非無解難題,而是一個亟待系統攻克的體驗課題。作為鴻蒙生態的早期開發者和華為鴻蒙應用開發高級認證獲得者,秦駿將多年客户端開發經驗聚焦於廚房場景,主導開發了鴻蒙原生應用《實驗廚房》。在他看來,設備密度大,操作節奏快,出錯餘地小的廚房,恰好是檢驗多端協同是否真正可用的絕佳場景。

協同能力下沉,撐起體驗底盤

秦駿第一次接觸鴻蒙,是在 HarmonyOS 發佈初期。當時他正關注跨設備協同領域的技術動向。看到鴻蒙提出的“萬物互聯”理念,以及“一套系統滿足多終端設備需求”的架構設想,他立刻意識到,這可能是改變智能體驗的根本邏輯。

過去多設備交互往往依賴多個系統與應用的適配,流程繁瑣、體驗割裂;而鴻蒙通過將協同能力下沉到系統層,使得設備發現、數據同步、任務調度成為系統級能力。這種能力,落到技術上,秦駿認為關鍵在於分佈式軟總線與原子化服務的深度融合。

分佈式軟總線能夠實現設備間無感發現、低時延連接與高效傳輸,讓多終端協同從“技術難題”變成“基礎能力”。原子化服務則以按需調用的方式把服務送到用户當下最需要的位置,降低使用門檻。對智能家居而言,這兩者幾乎是體驗的底盤。前者讓設備真正聯動,後者讓服務自然觸達。

在秦駿看來,這套機制的價值在於,它讓多設備真正以統一邏輯協同工作成為可能。

正是這種判斷,讓他決定押注鴻蒙生態。一方面,他長期關注智能家居中的多設備協同問題,而鴻蒙提供的系統級能力讓過去難以落地場景有了實現路徑;另一方面,鴻蒙生態尚在早期,文檔、工具和社區都在快速演進,開發者有機會參與底層交互邏輯的構建,而不只是在成熟平台上做功能微調。這種參與感,對他而言尤為珍貴。

多年客户端開發的經驗,成為他快速切入鴻蒙開發的重要基礎。過去在跨平台適配中積累的經驗,讓他能迅速把握手機、平板、智慧屏、智能廚電等設備的交互差異。分佈式場景下的數據同步與任務調度,也因過往性能優化的經驗而少走彎路。

而更深層的積累,是一種長期訓練出的體驗直覺。他清楚,技術可以複雜,但用户路徑必須連貫;設備可以多樣,但操作邏輯不能割裂。正是這種堅持,讓《實驗廚房》在分佈式架構之上,實現了流暢的用户體驗。

原生能力落地,助力服務創新

真正讓秦駿得以深入瞭解鴻蒙的契機,是備考華為鴻蒙應用開發高級認證的過程。他坦言,真正的挑戰不在於掌握 ArkTS、UI 、生命週期管理等基礎內容,而在於要吃透分佈式數據管理、分佈式任務調度、原子化服務開發等鴻蒙獨有模塊,這些模塊正是《實驗廚房》核心功能實現的關鍵。

備考期間,他通過閲讀官方文檔、搭建自研 Demo、參與開發者社區討論,深入驗證技術細節。以分佈式數據同步為例,他反覆調試多設備間的傳輸邏輯,特別是在斷連重連場景下確保狀態一致性,這為《實驗廚房》中 “菜譜 - 記錄” 關係型數據的跨設備同步提供了技術保障,讓用户在任一設備上編輯的菜譜、記錄的烹飪實踐都能實時同步至其他設備。這個過程耗時,卻讓他真正吃透了鴻蒙 “一次開發、多端部署” 背後的技術支撐,也為《實驗廚房》採用 ArkUI 前端框架實現多設備自適應界面奠定了基礎。

也正是在這個過程中,他找到了自己的技術方向:聚焦鴻蒙原生應用在智能家居場景的技術落地與創新,而《實驗廚房》就是這一方向的具體實踐。

核心頁面與操作演示

《實驗廚房》的界面設計深度貼合鴻蒙多端適配特性,核心頁面流程清晰連貫,覆蓋 “選菜譜 - 做記錄 - 多設備聯動” 全場景:

1.瀑布流首頁(多設備自適應):手機端採用垂直瀑布流佈局,以高清菜譜成品圖為核心,搭配難度星級、預估耗時等關鍵信息卡片,支持下拉刷新與懶加載;智慧屏端自動適配橫向網格佈局,放大菜譜圖片與操作按鈕,方便烹飪時遠距離查看。用户點擊任意菜譜卡片,即可觸發分佈式拉起 —— 手機端打開詳情編輯頁,智慧屏同步顯示步驟流程圖,烤箱端自動喚醒並準備接收參數。

2.菜譜詳情頁(黃桃罐頭示例):頂部展示高清成品圖,下方分模塊呈現基礎信息卡(大號加粗字體顯示菜名,星級可視化難度,細分準備 / 烹飪 / 冷卻時間)、食材清單(帶勾選功能,標註特殊説明與消毒提示)、步驟流程圖(每步配示意圖 + 文字説明,支持左右滑動切換)。點擊步驟中的 “下發至烤箱” 按鈕,無需跳轉應用,系統通過原子化服務直接將蒸制温度、時間參數同步至關聯設備,同時彈出權限申請彈窗,確認後立即執行預熱操作。

3.烹飪記錄編輯頁:支持時間軸式添加內容,用户可拍攝圖片、輸入文字備註,系統自動添加時間戳。例如調整冰糖比例為 1:5 時,可標註 “原菜譜 1:6,此比例更甜”,並上傳糖水沸騰特寫圖;點擊 “關聯菜譜” 可直接綁定原食譜,形成 “菜譜 - 記錄” 追溯鏈路。記錄完成後,點擊 “多端同步”,數據通過分佈式數據對象實時同步至手機、平板、智慧屏,確保所有設備顯示一致。

4.原子化服務卡片:在鴻蒙桌面或負一屏,用户可添加 “今日食譜”“烤箱狀態”“採購清單” 卡片。“烤箱狀態” 卡片實時顯示當前温度、剩餘時間,支持一鍵暫停 / 繼續;“採購清單” 可通過食材識別功能自動生成,用户勾選後可直接同步至手機購物 APP,實現 “從廚房到超市” 的無縫銜接。

關鍵技術代碼示例

秦駿團隊在開發中,將鴻蒙分佈式能力與應用場景深度綁定,以下為核心功能的代碼片段及解析:

1. 分佈式設備發現與菜譜下發(基於分佈式軟總線)

import { distributedDeviceManager, DistributedDevice } from '@ohos.distributedDevice';
import { recipeManager } from '../model/RecipeManager';

// 設備發現與連接
async function discoverKitchenDevices() {
  try {
    // 篩選廚房類智能設備(烤箱、智能秤等)
    const devices: DistributedDevice[] = await distributedDeviceManager.discoverDevices({
      deviceType: ['kitchen_appliance'],
      transportType: 'wifi' // 優先WiFi傳輸,保障低時延
    });
    // 自動連接已綁定設備
    for (const device of devices) {
      if (device.isBound) {
        await distributedDeviceManager.connectDevice(device.deviceId);
        console.log(`已連接設備:${device.deviceName}`);
      }
    }
  } catch (error) {
    console.error(`設備發現失敗:${error.message}`);
  }
}

// 向烤箱下發菜譜參數
async function sendRecipeToOven(recipeId: string) {
  const recipe = await recipeManager.getRecipeById(recipeId);
  const ovenDevice = distributedDeviceManager.getBoundDeviceByType('oven');
  
  if (ovenDevice && ovenDevice.isConnected) {
    // 封裝烹飪參數(高優先級數據)
    const cookingParams = {
      temperature: recipe.cookingTemp, // 從菜譜中獲取温度
      time: recipe.cookingTime, // 從菜譜中獲取時間
      recipeName: recipe.name,
      priority: 'high' // 標記為高優先級,保障傳輸穩定性
    };
    
    // 通過分佈式軟總線發送數據
    await distributedDeviceManager.sendData({
      deviceId: ovenDevice.deviceId,
      data: JSON.stringify(cookingParams),
      serviceType: 'cooking_control'
    });
    console.log(`菜譜${recipe.name}已下發至${ovenDevice.deviceName}`);
  }
}

解析:該代碼實現了廚房智能設備的無感發現與連接,通過篩選設備類型精準定位烤箱、智能秤等相關設備;下發菜譜參數時,將核心數據標記為高優先級,確保在網絡波動時仍能優先傳輸,避免烹飪過程中出現參數延遲或偏差。

2. 分佈式數據同步(基於 DataObject)

import { DistributedDataObject, dataObjectManager } from '@ohos.data.distributedData';
import { CookingRecord } from '../model/CookingRecord';

// 初始化烹飪記錄分佈式數據對象
function initCookingRecordDataObject(recordId: string): DistributedDataObject {
  // 創建跨設備共享的數據對象
  const dataObject = dataObjectManager.createDataObject({
    storeId: 'cooking_record_store',
    objectKey: `record_${recordId}`,
    syncMode: 'real_time' // 實時同步模式
  });
  
  // 定義數據結構(與記錄模型一致)
  dataObject.defineProperties({
    title: { type: 'string', defaultValue: '' },
    createTime: { type: 'string', defaultValue: '' },
    steps: { type: 'array', defaultValue: [] },
    relatedRecipeId: { type: 'string', defaultValue: '' }
  });
  
  // 監聽數據變化,同步至本地數據庫
  dataObject.on('dataChange', (changes) => {
    const updatedRecord: CookingRecord = {
      id: recordId,
      title: dataObject.getValue('title'),
      createTime: dataObject.getValue('createTime'),
      steps: dataObject.getValue('steps'),
      relatedRecipeId: dataObject.getValue('relatedRecipeId')
    };
    // 更新本地RDB數據庫
    recipeManager.updateCookingRecord(updatedRecord);
  });
  
  return dataObject;
}

// 保存烹飪記錄(多端同步)
async function saveCookingRecord(record: CookingRecord) {
  const dataObject = initCookingRecordDataObject(record.id);
  // 設置數據(自動同步至所有關聯設備)
  dataObject.setValue('title', record.title);
  dataObject.setValue('createTime', record.createTime);
  dataObject.setValue('steps', record.steps);
  dataObject.setValue('relatedRecipeId', record.relatedRecipeId);
  
  await dataObject.flush(); // 強制刷新,確保數據實時同步
}

解析:通過分佈式數據對象(DataObject)封裝烹飪記錄數據,採用實時同步模式,確保用户在手機上編輯的記錄能即時同步至智慧屏、平板等設備;同時監聽數據變化,同步更新本地 RDB 關係型數據庫,保障數據一致性與完整性,實現 “一次編輯,多端可用”。

3. 原子化服務卡片(烤箱狀態展示)

// oven_status_card.ets
@Entry
@Component
struct OvenStatusCard {
  @State temperature: number = 0;
  @State remainingTime: number = 0;
  @State isWorking: boolean = false;
  
  build() {
    Column() {
      Text('烤箱狀態')
        .fontSize(16)
        .fontWeight(FontWeight.Bold)
        .margin({ bottom: 8 });
      
      Row() {
        Text('當前温度:')
          .fontSize(14);
        Text(`${this.temperature}℃`)
          .fontSize(18)
          .fontColor(this.isWorking ? Color.Red : Color.Black);
      }
      .margin({ bottom: 4 });
      
      Row() {
        Text('剩餘時間:')
          .fontSize(14);
        Text(`${this.remainingTime}分鐘`)
          .fontSize(18)
          .fontColor(this.isWorking ? Color.Red : Color.Gray);
      }
      .margin({ bottom: 8 });
      
      Button(this.isWorking ? '暫停' : '繼續')
        .width('100%')
        .onClick(() => {
          // 調用分佈式服務控制烤箱
          this.controlOven(!this.isWorking);
        });
    }
    .padding(12)
    .width('100%');
  }
  
  // 初始化時獲取烤箱狀態
  aboutToAppear() {
    this.fetchOvenStatus();
    // 定時刷新狀態(每3秒)
    setInterval(() => {
      this.fetchOvenStatus();
    }, 3000);
  }
  
  // 從分佈式設備獲取烤箱狀態
  async fetchOvenStatus() {
    const ovenDevice = distributedDeviceManager.getBoundDeviceByType('oven');
    if (ovenDevice && ovenDevice.isConnected) {
      const statusData = await distributedDeviceManager.receiveData({
        deviceId: ovenDevice.deviceId,
        serviceType: 'oven_status'
      });
      const status = JSON.parse(statusData);
      this.temperature = status.temperature;
      this.remainingTime = status.remainingTime;
      this.isWorking = status.isWorking;
    }
  }
  
  // 控制烤箱啓停
  async controlOven(isStart: boolean) {
    const ovenDevice = distributedDeviceManager.getBoundDeviceByType('oven');
    if (ovenDevice && ovenDevice.isConnected) {
      await distributedDeviceManager.sendData({
        deviceId: ovenDevice.deviceId,
        data: JSON.stringify({ isWorking: isStart }),
        serviceType: 'oven_control'
      });
      this.isWorking = isStart;
    }
  }
}

解析:該代碼實現了烤箱狀態原子化卡片,通過定時從分佈式設備獲取狀態數據,實時展示温度、剩餘時間;支持一鍵控制烤箱啓停,無需打開主應用,直接通過卡片完成核心操作,契合鴻蒙原子化服務 “按需調用、自然觸達” 的理念,極大提升廚房操作效率。

應用還嘗試更主動的服務邏輯。通過智能冰箱同步的食材庫存數據,結合用户過往的烹飪習慣,《實驗廚房》能推薦適配現有食材的菜譜,而不是讓用户先選菜再看缺什麼。這種 “用已有食材決定做什麼” 的思路,更貼近真實的廚房邏輯,更利於提升用户體驗,同時也呼應了應用 “智能輔助烹飪” 的核心功能,比如藉助計算機視覺的食材識別技術自動生成食材清單,通過自然語言處理分析用户記錄提供步驟優化建議。

這些流暢的體驗,建立在多設備狀態高度一致的基礎之上。秦駿坦言,多設備協同中最棘手的問題是狀態的實時性與一致性。烤箱當前的温度和剩餘時間必須在手機與智慧屏上保持同步,任何延遲或偏差都可能讓用户誤判烹飪進度。為解決這一問題,團隊採用分佈式數據對象(DataObject)封裝關鍵狀態,並將烹飪相關數據標記為高優先級,確保在網絡波動時核心信息仍能優先傳輸,這一技術方案也保障了《實驗廚房》中烹飪實踐記錄的時間軸式流程展示與數據準確性,讓用户能完整追溯每次烹飪改進。

權限機制的設計同樣需要精細權衡。系統僅在用户明確觸發 “下發食譜” 等操作時臨時申請設備控制權限,任務一旦完成便立即釋放。這種按需授權、用完即收的方式,在保障功能可用的同時,也儘可能降低對用户隱私和信任的消耗,與《實驗廚房》注重用户數據安全與隱私保護的設計原則一致。

同時,《實驗廚房》的技術架構深度契合鴻蒙生態特性,前端採用 ArkUI 框架保障原生性能與聲明式開發效率,數據持久化通過 RDB 關係型數據庫保證菜譜數據的一致性和完整性,文件系統專門存儲烹飪過程中的圖片、視頻等多媒體數據,再結合圖像處理服務實現食材圖片的智能裁剪與優化顯示,讓應用在多設備上都能呈現出直觀美觀的瀑布流菜譜瀏覽體驗。

未來與建議

談到行業未來,秦駿認為鴻蒙為智能家居提供了一種新的可能。未來幾年,他看好三個方向:一是設備能自動組網,用户無需手動配對就能實現無感協同;二是 AI 與鴻蒙深度融合,讓系統從被動響應指令轉向主動理解需求、提供服務;三是跨品牌生態全面打通,最終實現一個入口管理全家設備。在他看來,智能家居的下一步,是從“功能聯動”走向“體驗融合”,從“設備智能”走向“服務智能”。

這些想法,他沒有停留在判斷層面,而是帶回了開發一線。在思否社區,秦駿主動分享了實戰教程,參與了技術問答,涵蓋分佈式數據同步、原子化服務卡片開發等內容。他相信,好的經驗應該能被複現,也能激發新的問題,而別人的問題往往就是你的下一步方向。

對於剛入門鴻蒙的開發者,他的建議同樣務實。先理解分佈式與原子化服務的核心理念,再通過 Demo 驗證端到端的協同鏈路。在此基礎上,深入理解分佈式數據管理與任務調度的機制;最終聚焦一個場景深耕,把能力沉澱成可複用的方案。

生態真正的增長,離不開一批願意持續投入、願意把經驗寫成方法的人。也正因此,秦駿特別鼓勵開發者關注鴻蒙領航者計劃。“我相信,加入鴻蒙領航者計劃,努力成為鴻蒙極客,不僅能夠獲得與行業專家深度交流的機會,還能不斷提升自己的技術水平。開發者更加全面地理解鴻蒙生態的核心優勢,從而為個人成長和整個社區貢獻更多價值。”

採訪最後,秦駿給年輕開發者留下一句話:“別怕從零開始,鴻蒙生態正處在能做事的階段,每個早期參與者都有機會成為建設者和受益者。要相信技術的價值永遠在你寫下的每一行代碼裏。”

報名鏈接 👉:鴻蒙領航者招募|加入領航者陣營,共享共建鴻蒙新世界

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.