成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

鴻蒙HarmonyOS應用開發快速上手心得

開發 OpenHarmony
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[407006]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

談及接觸到HarmonyOS應用的開發,主要是因為在2020年年底接到華為一個項目為某兩所985高校開發實驗案例手冊,一個是上層應用方向的,一個是操作系統層的。

說實話,當時只是知道HarmonyOS,而沒有了解過其中任何開發技術。但是這兩個層面自己也算很有底氣去接,首先是對新知識新技術的饑渴(特別還是國產化的),加上自己畢竟做過10年的應用開發和3年的操作系統以及底層協議棧開發。

下面談談我是如何學習一門新技術的吧。

作為一個開發老鳥肯定是項目驅動學習,這個已經很多年都是這樣了,從最初的vc到delphi到php、java到Android、python等等。

1、項目案例需求分析與項目移植

我這里就拿之前我之前編寫的實驗指導手冊之一《HarmonyOS 手機通訊錄開發 實驗指導手冊》這個說起吧。

首先,在編寫這個案例之前分析這個案例需求。對于我這個老鳥來說基本不用多想,很小一個案例,頭腦中已經有一個原型出來了,當然沒有必要自己畫原型圖,這里貼一個最終實現的效果圖。

HarmonyOS應用開發快速上手心得-鴻蒙HarmonyOS技術社區

然后,根據以往的項目經驗來構想,如果使用Android或者Vue實現該是怎樣的幾個步驟。其實Android和Vue的語法雖然不一樣,其實基本思路也是類似的,不同技術棧的切換對比式學習非常重要。

這里還有點需要切記,拿到一個項目時,別著急看API和動手寫代碼

經過以上的構思,我很快就形成了一個初步的功能實現思路,并且能盡可能地多融匯一些開發常用的技術棧進來。

(1)實現通訊錄主頁UI布局

疑問點:通訊錄的UI布局在HarmonyOS中如何實現,里面涉及的UI組件Skd是否具備

(2)實現聯系人列表靜態數據渲染

(3)實現按鈕點擊、列表點擊、長按等各種監聽事件,使用日志打印模擬業務、debug調試

(4)添加聯系人詳情頁面,實現頁面之間跳轉傳參

(5)通過彈出窗口來編寫添加聯系人頁面

(6)聯系人列表數據的動態刷新

(7)靜態數據切換為本地持久化數據,比如是否存在sqlite,相應會對應數據的CRUD操作

(8)靜態數據切換為服務端數據,http網絡通信如何使用?是否涉及權限控制

(9)自定義組件使用

下面再來帶著這個思路和疑問去網上找資料。我個人習慣優先查閱官網資料。前期大家也別太依賴博客,畢竟博客里面的坑會一大堆,還跳不出來,講到這希望社區別打我啊。起碼我編寫完成系列手冊時沒有翻閱博客,當然可能那個時候的相關博客也極其少吧,畢竟官網資料也很少并且還存在部分錯誤。

2、閱讀官方開發文檔

現在華為官方文檔非常強大,我覺得大家想學HarmonyOS應用開發來看我的博客都有點多余了。

我這里講下看官方文檔的技巧吧,沒必要全篇通讀細讀,帶著項目需求去閱讀。首先我就是尋找目錄,看看我上面的功能需求HarmonyOS SDK是不是都支持。

閱讀之后發現HarmonyOS 存在兩個SDK,Java的和JS的,簡單看了下入門案例就知道咋弄了,不用過于糾結其中細節了。JS的就對比VUE和微信小程序的思路去進行即可,Java的就先類比Android的去弄,等后面具體編寫代碼實現功能的時候再來排坑。

所以后面又對該項目編寫了一個JS版本的通訊錄開發,以及后面發現HarmonyOS 重要的分布式開發技術,還編寫了Java和JS混合開發,JS FA調用Java PA的數據的內容,這些都是在通讀文檔之后做了項目延申。

確認好了SDK基本都支持我要的需求之后,下面就開始實施代碼編輯了

3、開發必備HelloWorld

作為一個老鳥,我一直給學生強調HelloWorld的重要性。自行參照官網入門案例搭建開發環境,并且運行起來HelloWorld項目。官網步驟很詳細,沒有啥多解釋的。我這里強調幾個關鍵點,HelloWorld工程項目組織結構請好好看看,個人認為前期最主要的就是要熟悉這個項目組織結構,特別是還分JS版和Java版的,如有不清楚的請閱讀官方文檔對這塊的講解。

至于調試,前期只有網絡版的模擬器,并且要華為賬號認證,每個小時會自動釋放,這個清楚習慣即可,沒必要糾結。

至于DevEco Studio這個IDE我沒什么多說的,熟練使用過IDEA或者Android Studio等JetBrains全家桶產品的開發者來說,就順手拈來了。剛接觸的讀者還是先花心簡單熟悉下常用操作吧。

4、代碼編寫、閱讀官方文檔、填坑

由于前面已經分解了開發步驟,所以編寫代碼目的性非常明確,思路清晰。

如果是初學者缺乏項目經驗,從一個個小語法知識點開始學起,比如一個小小按鈕學半天,那樣開發和學習就太慢了。所以我還是建議多用項目式貫穿學習,特別是自己曾經做過的項目移植或者需求非常清楚的項目代入。

既然知道了Java SDK開發,然后發現可以和Android進行對比開發,那么這對Android老鳥來說要做的就是編寫代碼邊做好差異化記錄筆記即可。之前我同事也在社區上發布了《安卓VS鴻蒙第三方件切換寶典》,就是這種開發思維下的產物。

首先強調一個編寫代碼習慣。包結構的合理劃分,包名清晰,然后就是類名、方法名、變量名、常量名命名規范,這樣即使注釋很少沒有詳細設計文檔也很方便閱讀代碼。

然后是git的使用,每完成一個核心步驟及時提交并且編寫簡要明了的提交日志。

HarmonyOS應用開發快速上手心得-鴻蒙HarmonyOS技術社區

最后就是一步步去解決問題了

(1)實現通訊錄主頁UI布局

針對本項目案例先把上下結構菜單欄和空列表布局出來,然后微微調整UI細節,此時你就會對布局內容掌握的七七八八了,沒有必要進一步深究了。此時可以記錄下Android和HarmonyOS的布局知識點異同點

(2)實現聯系人列表靜態數據渲染

發現HarmonyOS和Android列表數據渲染實現類似,也是采用一個lsit ui組件配合provider進行實現。

(3)實現按鈕點擊、列表點擊、長按等各種監聽事件,使用日志打印模擬業務、debug調試

點擊事件監聽是應用中最常用來觸發業務邏輯的,前期在沒有實際業務的時候,請用日志打印來取代實際業務即可。

初學者往往會吐槽sysout、log好無聊,后面你就會發現它最好用。這里我重點強調一個問題,做開發一定要hold住關鍵點,現在是要學習掌握點擊事件的觸發,不用真要出一個實際業務場景,比如做大數據分析,重點是采用哪些大數據技術去根據原數據集分析出我所關注的哪些維度的數據,這些才是核心,而不是這些數據如何漂亮的展示出來。

當你覺得console下打印這些數據最漂亮的時候,我會覺得你進步了。當然回過頭來,后面還是要在些這些事件里面加入實際業務的操作,比如長按刪除聯系人的操作,這樣你就完全知道實際業務和最初所學基礎知識點是如何串聯起來的了,達到此目的即可。

(4)添加聯系人詳情頁面,實現頁面之間跳轉傳參

數據的交互可以說是應用開發時候的核心,比如傳統的web開發、前后端分離模式的web開發、App類CS程序開發,都逃不過數據的交互。

實現此功能我們首先要拋開某門特定的編程技術,而是想著以下幾個關鍵點:如何創建多個頁面、如何設置某個頁面為首頁、在哪里觸發頁面跳轉、前一個頁面的數據如何傳遞到下一個頁面、數據傳遞支持哪些數據結構、數據如何從下一個頁面回傳回來,然后我們再來去閱讀官方文檔找尋相應API進行處理即可。

這里著重提示,我個人開發理念里面把API語法放到非常低的地位,從來不記憶API,比如你只需要知道SDK中肯定有個API能夠實現頁面跳轉的功能,然后自己能夠快速的查閱資料或者自己的筆記、編寫過的demo,做到眼熟即可。保證常用的API在你很長一段時間沒有做此類開發之后,依然能在1分鐘之內解決問題。特別是在你學習過七八門編程語言之后,越發不可能去記各種API了。

(5)通過彈出窗口來編寫添加聯系人頁面

(6)聯系人列表數據的動態刷新

這兩步依然是查閱官方資料即可實現,做好對比和記錄即可。

(7)靜態數據切換為本地持久化數據,比如是否存在sqlite,會對應數據的CRUD操作

這步涉及到數據庫的使用,查閱資料之后,發現依然是傳統的原生sql操作和ORM模型操作。至于CRUD我不多說了,初學者最開始主要都是干這個,開發老鳥見到這個都想吐了。這里不多說,我認為原生sql雖然沒有ORM操作起來清爽,但是學習成本低,學會原生sql玩轉所有數據庫,因此我還是更推薦原生sql使用。

到這一步有一個我非常想重點強調的步驟就是,對方法(即函數)的編寫。大的業務層面面向接口設計,落實業務的時候面向對象設計,實施落地的時候最重要的就是方法的設計編寫。一個優秀的代碼開發者,在想清楚需求之后,只需要編寫出方法的兩個關鍵要素,方法形參和返回值,那么他一定就能實現該業務。這里就重點在于他對業務的深入理解和數據的交互,因此前期在編寫代碼的時候幾步偽代碼就可以完成一個功能模塊的設計與實現。

下面我編寫下偽代碼:

  1. (1)---實現布局---- 
  2. (2)在AbilitySlice中關聯布局,并且初始化要使用的各個UI組件,初始化監聽事件 
  3. (3)編寫三個核心業務方法,用于數據的幾種場景切換 
  4.  //獲取sqlite數據庫中的數據,集成sqlite之后調用這個方法取代之前的靜態數據方法 
  5.     private List<Contacts> getSqliteData() { 
  6.  
  7.     } 
  8. //生成靜態的列表數據進行模擬,在對接sqlite或者服務端之后不再使用 
  9.     private List<Contacts> getData() { 
  10.     } 
  11.  //通過http請求獲取服務端數據 
  12.     private void getServerData() { 
  13.     } 
  14. (4)菜單選擇監聽事件切換數據源加載 
  15. switch (position) { 
  16.     case 0: 
  17.         getData(); 
  18.         
  19.         break; 
  20.     case 1: 
  21.         getSqliteData() 
  22.         break; 
  23.     case 2: 
  24.         getServerData(); 
  25.         break; 

這里提到數據庫的操作,我們也可以引入習慣的dao接口設計考慮,編寫相應dao層,然后設計實現類進行實現,同時上面的偽代碼方法還可以封裝到一個獲取數據服務的Service接口中,然后利用業務接口進行實現。此處依然是想強調設計先于代碼。

(8)靜態數據切換為服務端數據,http網絡通信如何使用?是否涉及權限控制

http網絡通信在app開發中必不可少的東西,既然是Java SDK,那顯然會想到支持最原生的HttpConnection API,查閱官網資料也會發現肯定是支持的,但是一般不會使用原生的,往往會引入一些第三方優秀庫進行開發,比如okhttp就是存粹的Java jar包,進入開發即可。由于不是Android開發,這里不要引入Android的aar庫進行開發。

網絡開發中就會再遇到各種不同的坑,比如權限申請、ui主線程不能執行網絡耗時任務等,這些都可以通過經驗或者閱讀報錯日志一一解決。

提到網絡通信交互,不得不想到各種MVC、MVP、MVVM設計模式了,起初當然最熟悉的還是MVC,先使用傳統的MVC去進行開發,后續可以自行封裝MVP的開發模式。

(9)自定義組件使用

HarmonyOS處于起步階段,最初的SDK開發包只會帶有基礎功能的開發,如果全部基于原生SDK進行開發,項目開發效率肯定會比傳統的Android、iOS低太多,因為他們已經非常成熟,有大量優秀的開源第三方組件庫,說白了現在開發一個應用就跟碼積木一樣。現在就需要大量優秀開發者造出各種優秀的輪子出來讓大家可以更快速的開發項目。

編寫一個自定義組件確實比完成一個簡單的項目需求要更加有意思和成就感,即使一個非常小的組件。這就需要耐心閱讀官方SDK API甚至底層代碼實現了,當然現在官網文檔很齊全,我在編寫第一個組件的時候還是消耗了很多精力的,那個時候文檔缺乏,只能看比較生澀的API文檔,然后半猜半試搗鼓出來。

(10)重要特性功能引入

讀完官方文檔之后,發現了分布式數據通信、協同、流轉等重要技術,后面就主要思考使用場景將其整合開發進去。本案例正好可以運用分布式PA和FA的互相調用,對于這個功能引用也可以完美的通過該項目案例進行整合,這種整合類的也能更考驗對新知識的融會貫通。比如JS開發一個通訊錄FA,然后Java開發通訊錄數據服務PA,FA去獲取PA中的數據即可。

5、無法解決的坑如何求助

這里著重給初學者一個忠告,不要遇到一個問題就馬上求助問人,一個問題出現首先要通過查看日志進行解決,自行翻閱資料,反復嘗試,錯誤復現手段記錄,對比場景解決等措施自行想辦法解決,只有經過反復嘗試發現是問題的時候再來求助老師,并且求助之前能夠清晰的描述問題現象。

在項目開發中發現了官方文檔、工具等各種bug,做好了充分記錄和證據論證,然后提交給了華為方進行求助和整改,對于缺失的關鍵API操作或者技術描述也能明確提出合理化訴求進行求助。

6、開發完成之后的項目復盤

  1. 梳理總結開發思路,主要是分析前期的思路是否存在不準確的地方;
  2. 梳理回顧開發過程中遇到的坑點,自己是如何一步步填坑的;
  3. 整理相關文檔,進行歸檔留存;
  4. 整理該項目中所運用到的技術棧;
  5. 梳理該項目待持續改進的地方;

7、本項目所用到的相關的一些技術點

1.HarmonyOS移動應用開發工具(DevEco Studio)使用;

2.UI組件使用,包括Text,Button,TextFiled,Image,RadioButton,

RadioContainer,ToastDialog,ListContainer;

3.UI布局的使用,包括DirectionalLayout,DependentLayout;

4.日志打印,HiLog的使用;

5.各種事件監聽操作與業務邏輯實現;(重難點)

6.ListContainer子布局結合RecycleItemProvider的使用;(重難點)

7.對話框以及自定義對話框的使用;(重難點)

8.頁面生命周期以及頁面之間跳轉與傳參;

9.自定義組件(同時涉及到Canvas)以及如何調用;(重難點)

10.數據存儲操作,主要涉及sqlite數據庫存儲;(重難點)

11.通過HTTP網絡通信與服務端交互;(重難點)

12.多線程通信;(重難點)

13.代碼編程規范、設計模式;(重難點)

8、個人總結

學習沒有捷徑,只有依靠一腔熱血和持之以恒的努力。反復跳坑填坑,多了自然觸類旁通,即使剛新接觸一個技術,也能快速搞定一個項目的移植,比如這個小項目案例從剛接觸到一天開發完成都足夠了。

學習編程切忌執著語法和API,而要注重思維鍛煉,多練習多踩坑多對比多總結才是王道。

對于開發老鳥,我對快速掌握HarmonyOS開發的建議是將自己原有的項目移植,并且盡可能多融入一些技術點。

對于初學者,我建議是找到一個我這種項目貫穿式案例然后配合自己查閱官方資料進行結合學習,也會事半功倍。

應用做多了,會慢慢失去興趣了,都是各種數據交互和UI渲染,這時強烈推薦大家去關注下操作系統層的源碼啊,此時c的代碼或許會看起來更親切哦,我這里推薦的不是開發板和上層傳數據這類應用開發,而是操作系統內核代碼,值得一看。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2020-11-09 11:56:49

HarmonyOS

2020-11-17 08:43:20

ElasticSear

2014-12-12 10:25:21

Xcode 6iOS快速上手

2020-09-28 15:13:04

鴻蒙

2011-07-26 13:58:17

LINQ

2021-02-07 12:08:39

鴻蒙HarmonyOS應用開發

2013-11-19 12:53:33

OA信息化

2021-12-10 08:13:02

MatplotlibpythonAPI

2022-08-19 07:13:45

SQL方法編程

2022-08-21 07:17:16

LinkerdKubernetes服務網格

2023-03-08 12:43:44

微軟AI

2017-07-05 17:50:52

KotlinJava程序員

2010-05-18 10:17:11

2011-07-25 15:42:58

XML

2023-06-13 08:00:57

ChatGPT語言模型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级做a | 欧美综合在线观看 | 99色综合 | 欧美福利一区 | 久久99精品国产 | 国产精品不卡 | 精品久久中文字幕 | 欧美a免费| 久久久精 | 自拍视频国产 | 国产久 | 欧美精品二区三区 | 成年人免费在线视频 | 久久久久久久亚洲精品 | 亚洲精品中文在线 | 黄色一级免费看 | 伊人性伊人情综合网 | 日本精品网站 | 亚洲一区二区在线 | 羞羞网站免费观看 | 毛片一级电影 | 在线成人 | 在线观看国产视频 | 日本小电影网站 | 久久国产区 | 精品国产乱码久久久久久丨区2区 | 精品久久久久久久久久久下田 | 精品国产久 | wwwxxx国产 | 美女一级毛片 | 国产福利精品一区 | 日韩av一区二区在线观看 | 色狠狠桃花综合 | 久久国产精品一区二区 | 成人免费视频在线观看 | 中文字幕国产精品 | 日本高清中文字幕 | 久久国产区 | 中文天堂在线一区 | 国产欧美在线观看 | 欧美一级三级在线观看 |