HarmonyOS 應用開發學習記錄 - 從Windows開發者視角看鴻蒙開發

起始

????????2024年6月21日召開的華為開發者大會2024上宣布Harmony OS NEXT(即鴻蒙星河版)面向開發者啟動Beta版,這也被人們稱為“純血鴻蒙”,它基于鴻蒙內核,不再兼容安卓開發的APP應用。

? ? ? ? 時至今日近一年了,我也有了嘗試鴻蒙系統的念頭。

? ? ? ? 這個系列,將記錄我逐步學習 HarmonyOS 應用開發的過程,記錄一位老牌?Windows 程序員視角下轉型開發的過程,沉淀自己所學,如果能為大家帶來一些幫助,幸甚之至。文章中的不當之處,請及時指正,感謝!

? ? ? ? 在寫這篇文章前,我在華為官方開發者文檔上學習了幾天,當前(205年06月10日)?HarmonyOS SDK 版本是 5.0.5(17),后續內容都是基于此版本的討論,最新的版本可以在這里查看。

? ? ? ? 第一篇,主要是談談從Windows開發者感受HarmonyOS的差異,以及開發轉型需要注意的技術細節。

? ? ? ? 坦白地說,學習了幾天 HarmonyOS 開發,對于 Windows C++/Delphi 原生開發的我來說:

開發體感差異巨大? ? ? ?

????????首先,對有其他系統程序開發經驗,尤其是有 Windows 系統開發經驗的朋友提個醒,HarmonyOS 上的開發思路、體感和過去的“程序”截然不同。

  • ????????開發語言 -?ArKTS擴展自TypeScript的HarmonyOS應用開發官方高級語言。前端對此更親切。
  • ????????開發IDE -??DevEco Studio 基于IntelliJ IDEA Community開源版本打造。Java開發者狂喜,與idea基本一樣。
  • ????????開發范式 -?分別是基于ArkTS的聲明式開發范式(簡稱“聲明式開發范式”)和兼容JS的類Web開發范式(簡稱“類Web開發范式”)。前端又狂喜。

????????HarmonyOS 有很多縫合的觀感,就比如開發過程,讓我有種拿著JAVA IDE 寫前端的體感。甚至,像是在寫 Electron、Tarui?程序?-- HarmonyOS 附帶了一個拓展版本的Node.js,UI可以通過它和原生模塊交互,做過 Electron、Tarui 開發的朋友對此應該十分熟悉。

????????這一迥異的開發體驗背后是系統理念的差異。Windows 原生 C++ 開發程序員會有些抓瞎。

? ? ? ? 有些同學會想,我不打算新學語言了,那么? ? ? ?

可以只用 C++ 開發程序嗎?

? ? ? ? 答案是:基本不能。

? ? ? ? 首先是UI框架方面,?HarmonyOS 定制了UI框架,這是為 ArkTs 定制的。C++和Java主要用于特定場景的開發??,但無法完全替代ArkTS(尤其是界面開發)。

? ? ? ? 因此,學習 ArkTS 是鴻蒙開發必備的基礎。

ArkTS 難學嗎?

? ? ? ? 對前端,對熟悉 TypeScript ,尤其是熟悉 Electron、Tarui 開發的的同學來說應該是如魚得水。對于 C++ 的同學,恐怕要經歷一個不小的轉型。除非你的目標僅僅是開發特定性能敏感模塊的功能模塊。

? ? ? ? 不過僅僅就 ArkTS 語言來說,問題不大。尤其是我必須提一點,HarmonyOS 的文檔教程十分的豐富詳實,示例、練習題、視頻課程應有盡有,有種在線輔助的貼心感👍。

? ? ? ? 只要想學,肯定不難,尤其從 C++ 這種超級語法怪過來,會覺得輕松不少,更多的是開發范式的適應。?

? ? ? ? 回過頭來,我們看看?HarmonyOS 本身,拋開一些口水仗的問題,前面提到的系統理念差異具體是什么差異,華為為什么要推出新的系統,它新在哪里?
?

Windows 和?HarmonyOS 對比

先來對比下兩個系統中的一些基礎概念

系統核心概念映射表

Windows概念HarmonyOS對應概念重要差異說明
進程(Process)AbilityAbility是功能單元而非純粹執行容器
窗口(Window)Component/Page鴻蒙采用聲明式UI描述
注冊表(Registry)Preferences/DataAbility分布式數據管理替代中心化配置
DLL動態庫HAR靜態包鴻蒙強調編譯時確定依賴
Win32 APINative API鴻蒙API更面向服務化場景

? ? ? ? 可見,在 HarmonyOS 中用戶和開發人員已經遠離了系統底層細節,UI是聲明式的,數據是分布式的,系統功能是面向場景式的。

開發模式的區別

????????傳統的跨平臺、多端的開發模式是為每一個系統環境使用獨立的SDK,開發獨立的APP,打獨立的包。每個包最終是一個只包含對應端的獨立實體。

????????而HarmonyOS強調的是“一次開發, 多端部署”,即“一多開發”。因此,從項目工程管理、到界面布局到包的生成,都是一套。底層設備環境的差異被 HarmonyOS 抹平。

系統架構對比

Windows NT:集中式設計

經典的Windows NT架構緊湊致密:

  • 分層明確:用戶態/內核態嚴格分離

  • 單體式內核:文件系統、設備驅動、安全機制等都運行在內核空間

  • 注冊表中心化:系統配置高度集中

HarmonyOS架構:分布式設計

HarmonyOS則體現為分布式場景化:

  • 微內核設計:僅最基礎的功能在內核中(任務調度、內存管理)

  • 服務組件化:文件系統、設備驅動等都作為獨立服務運行在用戶態

  • 無中心配置:采用分布式數據管理替代傳統注冊表

關鍵差異點

  • 模塊耦合度:Windows各模塊間調用關系復雜,鴻蒙通過IPC嚴格隔離

  • 擴展性:Windows依賴驅動模型,鴻蒙通過Ability動態加載

  • 安全性:鴻蒙的權限粒度更細,默認遵循最小權限原則

HarmonyOS 的全場景分布式特性

? ? ??

在HarmonyOS開發者文檔上,多次提及到了多端、流轉、分布式、場景化的字眼

????????

? ? ? ? 我們要重點要理解鴻蒙的"分布式"特點,這是最值得Windows開發者注意的差異點,我們從一個打開文件的操作來對比直觀感受這個差異。

在Windows上:

// 傳統Windows文件操作
var file = File.Open(@"C:\Users\Name\file.txt", FileMode.Open);

在HarmonyOS中可能是:

// 鴻蒙分布式文件訪問
let fileAccessHelper = fileIO.createFileAccessHelper(context);
let file = await fileAccessHelper.openFile("deviceId://file.txt"); 

關鍵區別:

  1. 沒有固定路徑概念,而是通過統一資源標識符(URI)定位

  2. 自動處理設備間通信細節

  3. 異步操作是默認模式

開發思維轉變

1. 從"設備為中心"到"場景為中心"

Windows開發通常假設:

  • 應用運行在單一設備上

  • 硬件配置相對固定

  • 網絡連接是可選功能

鴻蒙開發需要假設:

  • 應用可能跨多個設備協同工作

  • 硬件能力動態變化(設備隨時可能加入或離開)

  • 網絡連接是基礎能力

2. 生命周期管理的差異

Windows應用生命周期:

啟動 → 運行 → 最小化/最大化 → 關閉

HarmonyOS Ability生命周期:

Create → Foreground → Background → Destroy↑___________↓     ↑______↓

特別注意

  • 鴻蒙應用更頻繁地在前后臺切換

  • 必須妥善處理狀態保存/恢復

  • 后臺運行有嚴格限制(與Windows服務概念不同)

為了更好的感受分布式特性,我們再次展示一個示例:


// 發現附近設備
import deviceManager from '@ohos.distributedDeviceManager';let deviceList = [];
const SUBSCRIBE_ID = 100;// 1. 創建設備管理器
let dmInstance = deviceManager.createDeviceManager("com.example.demo");// 2. 注冊設備狀態回調
dmInstance.on("deviceStateChange", (data) => {let device = data.device;if (data.action === 0) { // 設備上線deviceList.push(device);} else { // 設備離線deviceList = deviceList.filter(item => item.deviceId !== device.deviceId);}
});// 3. 開始發現設備
dmInstance.startDeviceDiscovery(SUBSCRIBE_ID);// 4. 選擇設備后發送數據
async function sendData(deviceId, data) {let channel = await dmInstance.createDataChannel(deviceId);channel.send(data);
}

這個簡單示例展示了:

  • 設備動態發現機制

  • 跨設備通信的抽象層

  • 響應式編程風格

給Windows開發者的特別提醒

  1. 線程模型差異

    • 不像Windows有豐富的線程優先級控制

    • Worker線程是主要的多任務手段

    • UI線程必須保持輕量

  2. 存儲訪問

    • 沒有直接的"文件系統"概念

    • 使用DataAbility抽象數據源

    • 偏好使用分布式數據庫

  3. 硬件交互

    • 通過服務Ability而非驅動

    • 需要動態檢查能力可用性

    • 權限聲明更嚴格

?回顧總結

? ? ? ?在 HarmonyOS 上開發,需要放棄經典的操作系統概念,開發細節遠離底層,聲明式UI,響應式編程,關注場景化,以及最重要的分布式,分布式,還是它X的分布式!


預告,下一篇我們將正式進入?HarmonyOS 應用開發,開啟新的體驗!

我對本系列的目標是,完成本系列后,將能夠:

  • 理解HarmonyOS的核心設計理念

  • 熟練使用ArkTS/ETS進行應用開發

  • 掌握鴻蒙特有的分布式能力開發

  • 將Windows開發經驗有效遷移到鴻蒙平臺

  • 獨立開發并發布完整的HarmonyOS應用


參考?

  • 所有HarmonyOS版本-版本說明 - 華為HarmonyOS開發者
  • 應用開發導讀-基礎入門 - 華為HarmonyOS開發者
  • 知識地圖-HarmonyOS應用開發知識-華為開發者聯盟

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83228.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83228.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83228.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 事務管理與鎖優化:確保數據一致性和并發性

在多用戶并發訪問的數據庫系統中,如何確保數據的**一致性(Consistency)和并發性(Concurrency)**是一個核心挑戰。**事務(Transaction)和鎖(Lock)**是 MySQL 應對這一挑戰的兩大利器。事務保證了操作的原子性、一致性、隔離性和持久性,而鎖機制則在并發環境下協調不同…

OpenPrompt 有沒有實現連續提示詞和提手動示詞一起優化的

OpenPrompt 有沒有實現連續提示詞和提手動示詞一起優化的 OpenPrompt 中連續提示詞與手動提示詞的混合優化 OpenPrompt 確實支持同時優化連續提示詞(Soft Prompt)和手動設計的離散提示詞(Manual Prompt)。這種混合優化策略可以結合兩者的優勢: 連續提示詞:通過梯度下降…

Android添加語言列表

方式一 frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java Settings.System.putString(context.getContentResolver(),Settings.System.SYSTEM_LOCALES, "ru-RU,en-US"); 方式2 packages/apps/Settings/src/co…

解決uniapp開發app map組件最高層級 遮擋自定義解決底部tabbar方法

subNvue,是 vue 頁面的原生子窗體,把weex渲染的原生界面當做 vue 頁面的子窗體覆蓋在頁面上。它不是全屏頁面,它給App平臺vue頁面中的層級覆蓋和原生界面自定義提供了更強大和靈活的解決方案。它也不是組件,就是一個原生子窗體。 …

如何保障服務器的安全

如何保障服務器的安全 以下是保障服務器安全的核心措施及實施建議: 一、基礎設施層防護 物理安全 機房設置防火/防水/防雷系統,部署門禁監控設備。 服務器固定于抗震機架,避免物理損壞。 網絡防護 防火墻規則:僅開放業務必要端…

C語言 學習 C程序的內存模型 2025年6月10日08:55:13

堆棧與內存管理 堆棧(Stack) : 后進先出(LIFO) 線性數據結構 包含壓棧(Push) ,彈棧(Pop) 用途:臨時存儲數據(函數調用,局部變量) 管理:由系統自動分配和回收 速度快 ,容量有限! 堆棧代碼示例: //堆棧示例 :局部變量 void getText() {int text20;//儲存在堆棧中 } 內存管理…

CppCon 2015 學習:Implementing class properties effectively

這段內容講的是C中“屬性”(Property)的實現及其設計理念,并結合一個實際類Text來說明。中文理解如下: 關于“屬性”(Property) 屬性:介于類的字段(field)和方法&#…

[electron]預腳本不顯示內聯script

script-src self 是 Content Security Policy (CSP) 中的一個指令,它的作用是限制加載和執行 JavaScript 腳本的來源。 具體來說: self 表示 當前源。也就是說,只有來自當前網站或者當前頁面所在域名的 JavaScript 腳本才被允許執行。"…

基于安卓的文件管理器程序開發研究源碼數據庫文檔

摘 要 伴隨著現代科技的發展潮流,移動互聯網技術快速發展,各種基于通信技術的移動終端設備做的也越來越好了,現代智能手機大量的進入到了我們的生活中。電子產品的各種軟硬技術技術的發展,操作系統的不斷更新換代,谷歌…

MySQL主從復制實現指南

MySQL主從復制實現指南 一、主從復制原理 #mermaid-svg-i1zOswdD4OORQ35t {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-i1zOswdD4OORQ35t .error-icon{fill:#552222;}#mermaid-svg-i1zOswdD4OORQ35t .error-text…

spring jms使用

文章目錄 一、背景介紹二、注意點說明三、代碼pom.xmlmq.propertiesActiveMqConfigJmsSenderActiveMqInfoActivemqProtocolEnum生產者消費者 一、背景介紹 <dependency> 標簽中列出的 spring-jms 是 Spring Framework 提供的一個模塊&#xff0c;用于簡化 Java Message …

筆記——學習HTTP協議

HTTP協議 文章目錄 HTTP協議一、統一資源定位符&#xff08;url&#xff09;&#xff1a;URL編碼格式&#xff1a; 二、HTTP報文結構&#xff1a;三、HTTP請求方法&#xff1a;四、HTTP常見請求頭&#xff1a;五、HTTP狀態碼&#xff1a;六、HTTP常見響應頭&#xff1a;七、HTT…

Unity中的Mathf.Clamp01

2025年6月8日&#xff0c;周日晚上 Mathf.Clamp01 是 Unity 中的一個數學函數&#xff0c;它的作用是將一個浮點數&#xff08;float&#xff09;限制在0 到 1的范圍內。具體來說&#xff1a; 如果輸入值 小于 0&#xff0c;則返回 0。 如果輸入值 大于 1&#xff0c;則返回 1…

1 Studying《Linux Media Documentation》

目錄 1 MEDIA SUBSYSTEM ADMIN AND USER GUIDE 1.1.2 Building support for a media device 1.1.3 Infrared remote control support in video4linux drivers 1.1.4 Digital TV 1.1.5 Cards List 1.1.5.2 PCI drivers 1.1.6 Video4Linux (V4L) driver-specifific docume…

編譯原理 學習 2025年6月10日11:17:54

編譯原理 將高級編程語言編寫的源代碼轉換成機器可執行的代碼(二進制或匯編代碼) 核心任務: 詞法分析(正則表達式和有限自動機): 示例Token分類&#xff1a;關鍵字&#xff1a;if, while 運算符&#xff1a;, 標識符&#xff1a;變量名 分解源代碼為單詞 識別 其中關鍵字 …

風中低語:Linux 信號處理的藝術與實踐

文章目錄 &#x1f307;前言&#x1f3d9;?正文1、信號的處理時機1.1、處理情況1.2、“合適” 的時機 2、用戶態與內核態2.1、概念2.2、重談進程地址空間2.3、信號的處理過程 3、信號的捕捉3.1、內核如何實現信號的捕捉&#xff1f;3.2、sigaction 4、信號部分小結 補充 5、可…

ASP.NET Core SignalR - 部分客戶端消息發送

文章目錄 前言一、消息發送的核心概念1.客戶端標識2.消息接收范圍 二、向特定用戶發送消息管理員向指定用戶發送私信&#xff0c;或用戶之間一對一聊天。 三、向組發送消息聊天室、工作群組、通知訂閱等。 四、廣播消息系統公告、實時統計數據更新等。 五、向角色發送消息向管理…

前后端交互過程中—各類文件/圖片的上傳、下載、顯示轉換

前后端交互過程中—各類文件/圖片的上傳、下載、顯示轉換 圖片上傳下載常用函數&#xff1a;new Blob()**blobParts&#xff1a;&#xff08;必傳&#xff09;****options&#xff1a;&#xff08;可選&#xff09;**blob的常見的MIME類型&#xff1a; URL.createObjectURL()替…

校園二手交易平臺(微信小程序版)

文章目錄 1. 項目概述2. 項目功能思維導圖3. 技術架構1. 前端技術棧2. 后端技術棧 4. 核心模塊實現5. 總結6. 項目實現效果截圖7. 關于作者其它項目視頻教程介紹 1. 項目概述 校園二手交易平臺微信小程序旨在為在校學生提供一個便捷的二手物品交易渠道&#xff0c;包含用戶模塊…

Linux簡單的操作

ls ls 查看當前目錄 ll 查看詳細內容 ls -a 查看所有的內容 ls --help 查看方法文檔 pwd pwd 查看當前路徑 cd cd 轉路徑 cd .. 轉上一級路徑 cd 名 轉換路徑 …