新聞中心
想了解更多內(nèi)容,請訪問:

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的廊坊網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.
談及接觸到HarmonyOS應(yīng)用的開發(fā),主要是因為在2020年年底接到華為一個項目為某兩所985高校開發(fā)實驗案例手冊,一個是上層應(yīng)用方向的,一個是操作系統(tǒng)層的。
說實話,當(dāng)時只是知道HarmonyOS,而沒有了解過其中任何開發(fā)技術(shù)。但是這兩個層面自己也算很有底氣去接,首先是對新知識新技術(shù)的饑渴(特別還是國產(chǎn)化的),加上自己畢竟做過10年的應(yīng)用開發(fā)和3年的操作系統(tǒng)以及底層協(xié)議棧開發(fā)。
下面談?wù)勎沂侨绾螌W(xué)習(xí)一門新技術(shù)的吧。
作為一個開發(fā)老鳥肯定是項目驅(qū)動學(xué)習(xí),這個已經(jīng)很多年都是這樣了,從最初的vc到delphi到php、java到Android、python等等。
1、項目案例需求分析與項目移植
我這里就拿之前我之前編寫的實驗指導(dǎo)手冊之一《HarmonyOS 手機通訊錄開發(fā) 實驗指導(dǎo)手冊》這個說起吧。
首先,在編寫這個案例之前分析這個案例需求。對于我這個老鳥來說基本不用多想,很小一個案例,頭腦中已經(jīng)有一個原型出來了,當(dāng)然沒有必要自己畫原型圖,這里貼一個最終實現(xiàn)的效果圖。
然后,根據(jù)以往的項目經(jīng)驗來構(gòu)想,如果使用Android或者Vue實現(xiàn)該是怎樣的幾個步驟。其實Android和Vue的語法雖然不一樣,其實基本思路也是類似的,不同技術(shù)棧的切換對比式學(xué)習(xí)非常重要。
這里還有點需要切記,拿到一個項目時,別著急看API和動手寫代碼
經(jīng)過以上的構(gòu)思,我很快就形成了一個初步的功能實現(xiàn)思路,并且能盡可能地多融匯一些開發(fā)常用的技術(shù)棧進(jìn)來。
(1)實現(xiàn)通訊錄主頁UI布局
疑問點:通訊錄的UI布局在HarmonyOS中如何實現(xiàn),里面涉及的UI組件Skd是否具備
(2)實現(xiàn)聯(lián)系人列表靜態(tài)數(shù)據(jù)渲染
(3)實現(xiàn)按鈕點擊、列表點擊、長按等各種監(jiān)聽事件,使用日志打印模擬業(yè)務(wù)、debug調(diào)試
(4)添加聯(lián)系人詳情頁面,實現(xiàn)頁面之間跳轉(zhuǎn)傳參
(5)通過彈出窗口來編寫添加聯(lián)系人頁面
(6)聯(lián)系人列表數(shù)據(jù)的動態(tài)刷新
(7)靜態(tài)數(shù)據(jù)切換為本地持久化數(shù)據(jù),比如是否存在sqlite,相應(yīng)會對應(yīng)數(shù)據(jù)的CRUD操作
(8)靜態(tài)數(shù)據(jù)切換為服務(wù)端數(shù)據(jù),http網(wǎng)絡(luò)通信如何使用?是否涉及權(quán)限控制
(9)自定義組件使用
下面再來帶著這個思路和疑問去網(wǎng)上找資料。我個人習(xí)慣優(yōu)先查閱官網(wǎng)資料。前期大家也別太依賴博客,畢竟博客里面的坑會一大堆,還跳不出來,講到這希望社區(qū)別打我啊。起碼我編寫完成系列手冊時沒有翻閱博客,當(dāng)然可能那個時候的相關(guān)博客也極其少吧,畢竟官網(wǎng)資料也很少并且還存在部分錯誤。
2、閱讀官方開發(fā)文檔
現(xiàn)在華為官方文檔非常強大,我覺得大家想學(xué)HarmonyOS應(yīng)用開發(fā)來看我的博客都有點多余了。
我這里講下看官方文檔的技巧吧,沒必要全篇通讀細(xì)讀,帶著項目需求去閱讀。首先我就是尋找目錄,看看我上面的功能需求HarmonyOS SDK是不是都支持。
閱讀之后發(fā)現(xiàn)HarmonyOS 存在兩個SDK,Java的和JS的,簡單看了下入門案例就知道咋弄了,不用過于糾結(jié)其中細(xì)節(jié)了。JS的就對比VUE和微信小程序的思路去進(jìn)行即可,Java的就先類比Android的去弄,等后面具體編寫代碼實現(xiàn)功能的時候再來排坑。
所以后面又對該項目編寫了一個JS版本的通訊錄開發(fā),以及后面發(fā)現(xiàn)HarmonyOS 重要的分布式開發(fā)技術(shù),還編寫了Java和JS混合開發(fā),JS FA調(diào)用Java PA的數(shù)據(jù)的內(nèi)容,這些都是在通讀文檔之后做了項目延申。
確認(rèn)好了SDK基本都支持我要的需求之后,下面就開始實施代碼編輯了
3、開發(fā)必備HelloWorld
作為一個老鳥,我一直給學(xué)生強調(diào)HelloWorld的重要性。自行參照官網(wǎng)入門案例搭建開發(fā)環(huán)境,并且運行起來HelloWorld項目。官網(wǎng)步驟很詳細(xì),沒有啥多解釋的。我這里強調(diào)幾個關(guān)鍵點,HelloWorld工程項目組織結(jié)構(gòu)請好好看看,個人認(rèn)為前期最主要的就是要熟悉這個項目組織結(jié)構(gòu),特別是還分JS版和Java版的,如有不清楚的請閱讀官方文檔對這塊的講解。
至于調(diào)試,前期只有網(wǎng)絡(luò)版的模擬器,并且要華為賬號認(rèn)證,每個小時會自動釋放,這個清楚習(xí)慣即可,沒必要糾結(jié)。
至于DevEco Studio這個IDE我沒什么多說的,熟練使用過IDEA或者Android Studio等JetBrains全家桶產(chǎn)品的開發(fā)者來說,就順手拈來了。剛接觸的讀者還是先花心簡單熟悉下常用操作吧。
4、代碼編寫、閱讀官方文檔、填坑
由于前面已經(jīng)分解了開發(fā)步驟,所以編寫代碼目的性非常明確,思路清晰。
如果是初學(xué)者缺乏項目經(jīng)驗,從一個個小語法知識點開始學(xué)起,比如一個小小按鈕學(xué)半天,那樣開發(fā)和學(xué)習(xí)就太慢了。所以我還是建議多用項目式貫穿學(xué)習(xí),特別是自己曾經(jīng)做過的項目移植或者需求非常清楚的項目代入。
既然知道了Java SDK開發(fā),然后發(fā)現(xiàn)可以和Android進(jìn)行對比開發(fā),那么這對Android老鳥來說要做的就是編寫代碼邊做好差異化記錄筆記即可。之前我同事也在社區(qū)上發(fā)布了《安卓VS鴻蒙第三方件切換寶典》,就是這種開發(fā)思維下的產(chǎn)物。
首先強調(diào)一個編寫代碼習(xí)慣。包結(jié)構(gòu)的合理劃分,包名清晰,然后就是類名、方法名、變量名、常量名命名規(guī)范,這樣即使注釋很少沒有詳細(xì)設(shè)計文檔也很方便閱讀代碼。
然后是git的使用,每完成一個核心步驟及時提交并且編寫簡要明了的提交日志。
最后就是一步步去解決問題了
(1)實現(xiàn)通訊錄主頁UI布局
針對本項目案例先把上下結(jié)構(gòu)菜單欄和空列表布局出來,然后微微調(diào)整UI細(xì)節(jié),此時你就會對布局內(nèi)容掌握的七七八八了,沒有必要進(jìn)一步深究了。此時可以記錄下Android和HarmonyOS的布局知識點異同點
(2)實現(xiàn)聯(lián)系人列表靜態(tài)數(shù)據(jù)渲染
發(fā)現(xiàn)HarmonyOS和Android列表數(shù)據(jù)渲染實現(xiàn)類似,也是采用一個lsit ui組件配合provider進(jìn)行實現(xiàn)。
(3)實現(xiàn)按鈕點擊、列表點擊、長按等各種監(jiān)聽事件,使用日志打印模擬業(yè)務(wù)、debug調(diào)試
點擊事件監(jiān)聽是應(yīng)用中最常用來觸發(fā)業(yè)務(wù)邏輯的,前期在沒有實際業(yè)務(wù)的時候,請用日志打印來取代實際業(yè)務(wù)即可。
初學(xué)者往往會吐槽sysout、log好無聊,后面你就會發(fā)現(xiàn)它最好用。這里我重點強調(diào)一個問題,做開發(fā)一定要hold住關(guān)鍵點,現(xiàn)在是要學(xué)習(xí)掌握點擊事件的觸發(fā),不用真要出一個實際業(yè)務(wù)場景,比如做大數(shù)據(jù)分析,重點是采用哪些大數(shù)據(jù)技術(shù)去根據(jù)原數(shù)據(jù)集分析出我所關(guān)注的哪些維度的數(shù)據(jù),這些才是核心,而不是這些數(shù)據(jù)如何漂亮的展示出來。
當(dāng)你覺得console下打印這些數(shù)據(jù)最漂亮的時候,我會覺得你進(jìn)步了。當(dāng)然回過頭來,后面還是要在些這些事件里面加入實際業(yè)務(wù)的操作,比如長按刪除聯(lián)系人的操作,這樣你就完全知道實際業(yè)務(wù)和最初所學(xué)基礎(chǔ)知識點是如何串聯(lián)起來的了,達(dá)到此目的即可。
(4)添加聯(lián)系人詳情頁面,實現(xiàn)頁面之間跳轉(zhuǎn)傳參
數(shù)據(jù)的交互可以說是應(yīng)用開發(fā)時候的核心,比如傳統(tǒng)的web開發(fā)、前后端分離模式的web開發(fā)、App類CS程序開發(fā),都逃不過數(shù)據(jù)的交互。
實現(xiàn)此功能我們首先要拋開某門特定的編程技術(shù),而是想著以下幾個關(guān)鍵點:如何創(chuàng)建多個頁面、如何設(shè)置某個頁面為首頁、在哪里觸發(fā)頁面跳轉(zhuǎn)、前一個頁面的數(shù)據(jù)如何傳遞到下一個頁面、數(shù)據(jù)傳遞支持哪些數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)如何從下一個頁面回傳回來,然后我們再來去閱讀官方文檔找尋相應(yīng)API進(jìn)行處理即可。
這里著重提示,我個人開發(fā)理念里面把API語法放到非常低的地位,從來不記憶API,比如你只需要知道SDK中肯定有個API能夠?qū)崿F(xiàn)頁面跳轉(zhuǎn)的功能,然后自己能夠快速的查閱資料或者自己的筆記、編寫過的demo,做到眼熟即可。保證常用的API在你很長一段時間沒有做此類開發(fā)之后,依然能在1分鐘之內(nèi)解決問題。特別是在你學(xué)習(xí)過七八門編程語言之后,越發(fā)不可能去記各種API了。
(5)通過彈出窗口來編寫添加聯(lián)系人頁面
(6)聯(lián)系人列表數(shù)據(jù)的動態(tài)刷新
這兩步依然是查閱官方資料即可實現(xiàn),做好對比和記錄即可。
(7)靜態(tài)數(shù)據(jù)切換為本地持久化數(shù)據(jù),比如是否存在sqlite,會對應(yīng)數(shù)據(jù)的CRUD操作
這步涉及到數(shù)據(jù)庫的使用,查閱資料之后,發(fā)現(xiàn)依然是傳統(tǒng)的原生sql操作和ORM模型操作。至于CRUD我不多說了,初學(xué)者最開始主要都是干這個,開發(fā)老鳥見到這個都想吐了。這里不多說,我認(rèn)為原生sql雖然沒有ORM操作起來清爽,但是學(xué)習(xí)成本低,學(xué)會原生sql玩轉(zhuǎn)所有數(shù)據(jù)庫,因此我還是更推薦原生sql使用。
到這一步有一個我非常想重點強調(diào)的步驟就是,對方法(即函數(shù))的編寫。大的業(yè)務(wù)層面面向接口設(shè)計,落實業(yè)務(wù)的時候面向?qū)ο笤O(shè)計,實施落地的時候最重要的就是方法的設(shè)計編寫。一個優(yōu)秀的代碼開發(fā)者,在想清楚需求之后,只需要編寫出方法的兩個關(guān)鍵要素,方法形參和返回值,那么他一定就能實現(xiàn)該業(yè)務(wù)。這里就重點在于他對業(yè)務(wù)的深入理解和數(shù)據(jù)的交互,因此前期在編寫代碼的時候幾步偽代碼就可以完成一個功能模塊的設(shè)計與實現(xiàn)。
下面我編寫下偽代碼:
- (1)---實現(xiàn)布局----
- (2)在AbilitySlice中關(guān)聯(lián)布局,并且初始化要使用的各個UI組件,初始化監(jiān)聽事件
- (3)編寫三個核心業(yè)務(wù)方法,用于數(shù)據(jù)的幾種場景切換
- //獲取sqlite數(shù)據(jù)庫中的數(shù)據(jù),集成sqlite之后調(diào)用這個方法取代之前的靜態(tài)數(shù)據(jù)方法
- private List
getSqliteData() { - }
- //生成靜態(tài)的列表數(shù)據(jù)進(jìn)行模擬,在對接sqlite或者服務(wù)端之后不再使用
- private List
getData() { - }
- //通過http請求獲取服務(wù)端數(shù)據(jù)
- private void getServerData() {
- }
- (4)菜單選擇監(jiān)聽事件切換數(shù)據(jù)源加載
- switch (position) {
- case 0:
- getData();
- break;
- case 1:
- getSqliteData()
- break;
- case 2:
- getServerData();
- break;
- }
這里提到數(shù)據(jù)庫的操作,我們也可以引入習(xí)慣的dao接口設(shè)計考慮,編寫相應(yīng)dao層,然后設(shè)計實現(xiàn)類進(jìn)行實現(xiàn),同時上面的偽代碼方法還可以封裝到一個獲取數(shù)據(jù)服務(wù)的Service接口中,然后利用業(yè)務(wù)接口進(jìn)行實現(xiàn)。此處依然是想強調(diào)設(shè)計先于代碼。
(8)靜態(tài)數(shù)據(jù)切換為服務(wù)端數(shù)據(jù),http網(wǎng)絡(luò)通信如何使用?是否涉及權(quán)限控制
http網(wǎng)絡(luò)通信在app開發(fā)中必不可少的東西,既然是Java SDK,那顯然會想到支持最原生的HttpConnection API,查閱官網(wǎng)資料也會發(fā)現(xiàn)肯定是支持的,但是一般不會使用原生的,往往會引入一些第三方優(yōu)秀庫進(jìn)行開發(fā),比如okhttp就是存粹的Java jar包,進(jìn)入開發(fā)即可。由于不是Android開發(fā),這里不要引入Android的aar庫進(jìn)行開發(fā)。
網(wǎng)絡(luò)開發(fā)中就會再遇到各種不同的坑,比如權(quán)限申請、ui主線程不能執(zhí)行網(wǎng)絡(luò)耗時任務(wù)等,這些都可以通過經(jīng)驗或者閱讀報錯日志一一解決。
提到網(wǎng)絡(luò)通信交互,不得不想到各種MVC、MVP、MVVM設(shè)計模式了,起初當(dāng)然最熟悉的還是MVC,先使用傳統(tǒng)的MVC去進(jìn)行開發(fā),后續(xù)可以自行封裝MVP的開發(fā)模式。
(9)自定義組件使用
HarmonyOS處于起步階段,最初的SDK開發(fā)包只會帶有基礎(chǔ)功能的開發(fā),如果全部基于原生SDK進(jìn)行開發(fā),項目開發(fā)效率肯定會比傳統(tǒng)的Android、iOS低太多,因為他們已經(jīng)非常成熟,有大量優(yōu)秀的開源第三方組件庫,說白了現(xiàn)在開發(fā)一個應(yīng)用就跟碼積木一樣?,F(xiàn)在就需要大量優(yōu)秀開發(fā)者造出各種優(yōu)秀的輪子出來讓大家可以更快速的開發(fā)項目。
編寫一個自定義組件確實比完成一個簡單的項目需求要更加有意思和成就感,即使一個非常小的組件。這就需要耐心閱讀官方SDK API甚至底層代碼實現(xiàn)了,當(dāng)然現(xiàn)在官網(wǎng)文檔很齊全,我在編寫第一個組件的時候還是消耗了很多精力的,那個時候文檔缺乏,只能看比較生澀的API文檔,然后半猜半試搗鼓出來。
(10)重要特性功能引入
讀完官方文檔之后,發(fā)現(xiàn)了分布式數(shù)據(jù)通信、協(xié)同、流轉(zhuǎn)等重要技術(shù),后面就主要思考使用場景將其整合開發(fā)進(jìn)去。本案例正好可以運用分布式PA和FA的互相調(diào)用,對于這個功能引用也可以完美的通過該項目案例進(jìn)行整合,這種整合類的也能更考驗對新知識的融會貫通。比如JS開發(fā)一個通訊錄FA,然后Java開發(fā)通訊錄數(shù)據(jù)服務(wù)PA,F(xiàn)A去獲取PA中的數(shù)據(jù)即可。
5、無法解決的坑如何求助
這里著重給初學(xué)者一個忠告,不要遇到一個問題就馬上求助問人,一個問題出現(xiàn)首先要通過查看日志進(jìn)行解決,自行翻閱資料,反復(fù)嘗試,錯誤復(fù)現(xiàn)手段記錄,對比場景解決等措施自行想辦法解決,只有經(jīng)過反復(fù)嘗試發(fā)現(xiàn)是問題的時候再來求助老師,并且求助之前能夠清晰的描述問題現(xiàn)象。
在項目開發(fā)中發(fā)現(xiàn)了官方文檔、工具等各種bug,做好了充分記錄和證據(jù)論證,然后提交給了華為方進(jìn)行求助和整改,對于缺失的關(guān)鍵API操作或者技術(shù)描述也能明確提出合理化訴求進(jìn)行求助。
6、開發(fā)完成之后的項目復(fù)盤
- 梳理總結(jié)開發(fā)思路,主要是分析前期的思路是否存在不準(zhǔn)確的地方;
- 梳理回顧開發(fā)過程中遇到的坑點,自己是如何一步步填坑的;
- 整理相關(guān)文檔,進(jìn)行歸檔留存;
- 整理該項目中所運用到的技術(shù)棧;
- 梳理該項目待持續(xù)改進(jìn)的地方;
7、本項目所用到的相關(guān)的一些技術(shù)點
1.HarmonyOS移動應(yīng)用開發(fā)工具(DevEco Studio)使用;
2.UI組件使用,包括Text,Button,TextFiled,Image,RadioButton,
RadioContainer,ToastDialog,ListContainer;
3.UI布局的使用,包括DirectionalLayout,DependentLayout;
4.日志打印,HiLog的使用;
5.各種事件監(jiān)聽操作與業(yè)務(wù)邏輯實現(xiàn);(重難點)
6.ListContainer子布局結(jié)合RecycleItemProvider的使用;(重難點)
7.對話框以及自定義對話框的使用;(重難點)
8.頁面生命周期以及頁面之間跳轉(zhuǎn)與傳參;
9.自定義組件(同時涉及到Canvas)以及如何調(diào)用;(重難點)
10.數(shù)據(jù)存儲操作,主要涉及sqlite數(shù)據(jù)庫存儲;(重難點)
11.通過HTTP網(wǎng)絡(luò)通信與服務(wù)端交互;(重難點)
12.多線程通信;(重難點)
13.代碼編程規(guī)范、設(shè)計模式;(重難點)
8、個人總結(jié)
學(xué)習(xí)沒有捷徑,只有依靠一腔熱血和持之以恒的努力。反復(fù)跳坑填坑,多了自然觸類旁通,即使剛新接觸一個技術(shù),也能快速搞定一個項目的移植,比如這個小項目案例從剛接觸到一天開發(fā)完成都足夠了。
學(xué)習(xí)編程切忌執(zhí)著語法和API,而要注重思維鍛煉,多練習(xí)多踩坑多對比多總結(jié)才是王道。
對于開發(fā)老鳥,我對快速掌握HarmonyOS開發(fā)的建議是將自己原有的項目移植,并且盡可能多融入一些技術(shù)點。
對于初學(xué)者,我建議是找到一個我這種項目貫穿式案例然后配合自己查閱官方資料進(jìn)行結(jié)合學(xué)習(xí),也會事半功倍。
應(yīng)用做多了,會慢慢失去興趣了,都是各種數(shù)據(jù)交互和UI渲染,這時強烈推薦大家去關(guān)注下操作系統(tǒng)層的源碼啊,此時c的代碼或許會看起來更親切哦,我這里推薦的不是開發(fā)板和上層傳數(shù)據(jù)這類應(yīng)用開發(fā),而是操作系統(tǒng)內(nèi)核代碼,值得一看。
想了解更多內(nèi)容,請訪問:
和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.
新聞名稱:鴻蒙HarmonyOS應(yīng)用開發(fā)快速上手心得
分享網(wǎng)址:http://www.dlmjj.cn/article/ccoshdi.html


咨詢
建站咨詢
