sponsored links

HarmonyOS (鴻蒙作業系統)你值得擁有

今天我們來談談當下最火爆的萬物互聯的作業系統—Harmony OS,這是國人的驕傲,也是每一箇中華兒女值得去學習和研究的國產作業系統。在這裡主要是想透過自己所寫的一個小 Demo 來初探一下 Harmony OS 系統下的 app 應用開發,如有不對之處還望指出,共勉之。

Step 1: 開發環境的搭建

IDE & SDK 的安裝就不在這裡詳細講解了,華為的官網上面既有安裝包也有相關的步驟,相信大家可以透過文件自行完成。

Step2: app開發的相關術語學習(摘至華為官網)

第一部分:系統的定義

HarmonyOS 是一款“面向未來”、面向全場景(移動辦公、運動健康、社交通訊、媒體娛樂等)的分散式作業系統。

第二部分:開發app應用程式包結構

HarmonyOS 的使用者應用程式包以APP Pack(Application Package)形式釋出,它是由一個或多個 HAP(HarmonyOS Ability Package)以及描述每個 HAP 屬性的pack.info組成。

HAP 是 Ability 的部署包,HarmonyOS 應用程式碼圍繞 Ability 元件展開。
一個 HAP 是由程式碼、資源、第三方庫及應用配置檔案組成的模組包,可分為 entry 和feature 兩種模組型別。

Entry

entry:應用的主模組。
一個APP中,對於同一裝置型別必須有且只有一個entry型別的HAP,可獨立安裝執行。

Feature

feature:應用的動態特性模組。
一個 APP 可以包含一個或多個 feature 型別的 HAP,也可以不包含。只有包含 Ability 的 HAP 才能夠獨立執行。

Ability

Ability 是應用所具備的能力的抽象,一個應用可以包含一個或多個 Ability。
Ability 分為兩種型別:FA(Feature Ability)和 PA(Particle Ability)。
FA/PA 是應用的基本組成單元,能夠實現特定的業務功能。FA有UI介面,而PA無UI介面。

庫檔案

庫檔案是應用依賴的第三方程式碼(例如so、jar、bin、har等二進位制檔案),存放在 libs 目錄。

資原始檔

應用的資原始檔(字串、圖片、音訊等)存放於 resources 目錄下,便於開發者使用和維護,詳見資原始檔的分類。

配置檔案

配置檔案 (config.json) 是應用的 Ability 資訊,用於宣告應用的 Ability,以及應用所需許可權等資訊,詳見應用配置檔案。

pack.info

描述應用軟體包中每個 HAP 的屬性,由 IDE 編譯生成,應用市場根據該檔案進行拆包和 HAP 的分類儲存。

HAP 的具體屬性包括:
delivery-with-install: 表示該 HAP 是否支援隨應用安裝。“true”:表示支援隨應用安裝;“false”:表示不支援隨應用安裝。

name:HAP 檔名。

module-type:模組型別,entry 或 feature。

device-type:表示支援該 HAP 執行的裝置型別。

HAR(HarmonyOS Ability Resources)可以提供構建應用所需的所有內容,包括原始碼、資原始檔和 config.json 檔案。HAR 不同於 HAP,HAR 不能獨立安裝執行在裝置上,只能作為應用模組的依賴項被引用。

使用者應用程式泛指執行在裝置的作業系統之上,為使用者提供特定服務的程式,簡稱“應用”。

在 HarmonyOS 上執行的應用,有兩種形態:
傳統方式的需要安裝的應用。
提供特定功能,免安裝的應用(即原子化服務)。

第三部分:開發過程中常見的術語解釋

Page 與 AbilitySlice

Page 模板(以下簡稱“Page”)是 FA 唯一支援的模板,用於提供與使用者互動的能力。一個Page 可以由一個或多個 AbilitySlice 構成,AbilitySlice 是指應用的單個頁面及其控制邏輯的總和。

當一個 Page 由多個 AbilitySlice 共同構成時,這些 AbilitySlice 頁面提供的業務能力應具有高度相關性。例如,新聞瀏覽功能可以透過一個 Page 來實現,其中包含了兩個AbilitySlice:一個 AbilitySlice 用於展示新聞列表,另一個 AbilitySlice 用於展示新聞詳情。

Intent

Intent 是物件之間傳遞資訊的載體。例如,當一個 Ability 需要啟動另一個 Ability 時,或者一個 AbilitySlice 需要導航到另一個 AbilitySlice 時,可以透過 Intent 指定啟動的目標同時攜帶相關資料。

Ability

Ability 是應用所具備能力的抽象,也是應用程式的重要組成部分。
一個應用可以具備多種能力(即可以包含多個 Ability ),HarmonyOS 支援應用以 Ability 為單位進行部署。Ability 可以分為 FA(Feature Ability)和 PA(Particle Ability)兩種型別,每種型別為開發者提供了不同的模板,以便實現不同的業務功能。

FA 支援 Page Ability:
Page 模板是 FA 唯一支援的模板,用於提供與使用者互動的能力。一個 Page 例項可以包含一組相關頁面,每個頁面用一個 AbilitySlice 例項表示。

PA 支援 Service Ability 和 Data Ability:
Service 模板:用於提供後臺執行任務的能力。
Data 模板:用於對外部提供統一的資料訪問抽象。

Service Ability 基本概念

基於 Service 模板的 Ability(以下簡稱“Service”)主要用於後臺執行任務(如執行音樂播放、檔案下載等),但不提供使用者互動介面。

Service 可由其他應用或 Ability 啟動,即使使用者切換到其他應用,Service 仍將在後臺繼續執行。Service 是單例項的。在一個裝置上,相同的 Service 只會存在一個例項。如果多個 Ability 共用這個例項,只有當與 Service 繫結的所有 Ability 都退出後,Service 才能夠退出。

由於 Service 是在主執行緒裡執行的,因此,如果在 Service 裡面的操作時間過長,開發者必須在 Service 裡建立新的執行緒來處理(詳見執行緒間通訊),防止造成主執行緒阻塞,應用程式無響應。

Data Ability基本概念

使用 Data 模板的 Ability(以下簡稱“Data”)有助於應用管理其自身和其他應用儲存資料的訪問,並提供與其他應用共享資料的方法。Data 既可用於同裝置不同應用的資料共享,也支援跨裝置不同應用的資料共享。

資料的存放形式多樣,可以是資料庫,也可以是磁碟上的檔案。Data 對外提供對資料的增、刪、改、查,以及開啟檔案等介面,這些介面的具體實現由開發者提供。

備註:以上是一些在進行 Harmony OS app 應用開發過程中會經常涉及到的一些概念的東西,也是非常重要的,有一定的理解後將有利於我們進行系統的開發,所以我整理了一下放到了第二部分。

Step3:Demo 示例講解

第一部分:程式結構與程式入口

HarmonyOS (鴻蒙作業系統)你值得擁有

如上圖所示:entry 是應用的主模組,
1——標識的地方是 Slice 切片,
2——標識的地方是 main 方法所在的類檔案,
3——標識的地方是存放樣式檔案,
4——標識的地方是存放的佈局檔案。

第二部分:兩個Slice 檔案內容

package com.example.myapplication.slice;
import com.example.myapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;

public class MainAbilitySlice extends AbilitySlice {
    /*
    onStart()
      當系統首次建立Page例項時,觸發該回調。對於一個Page例項,該回調在其生命週期過程中僅觸發一次,
      Page在該邏輯後將進入INACTIVE狀態。開發者必須重寫該方法,並在此配置預設展示的AbilitySlice。
     */
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        //ResourceTable相應當selenium中的driver,這裡要是在設定佈局為 ability_main.xml檔案的內容,前面的Layout_是框架規則好的
        super.setUIContent(ResourceTable.Layout_ability_main);

        //類似於python 中selenium中的透過 id 來查詢元素,這裡的Id_button是ability_main.xml中的button 的id值
        Button button = (Button) findComponentById(ResourceTable.Id_button);

        //判斷button 是否為null
        if(button != null){
            //給button 設定click監聽事件
            button.setClickedListener(new Component.ClickedListener() {
                @Override
                public void onClick(Component component) {
                    //這裡相當於是render另一個頁面(這裡傳入了一個SecondAbilitySlice and Intent),實現了頁面的跳轉
                    present(new SecondAbilitySlice(),new Intent());
                }
            });
        }
    }

    /*
    onActive()
      Page會在進入INACTIVE狀態後來到前臺,然後系統呼叫此回撥。Page在此之後進入ACTIVE狀態,
     該狀態是應用與使用者互動的狀態。Page將保持在此狀態,除非某類事件發生導致Page失去焦點,
     比如使用者點選返回鍵或導航到其他Page。當此類事件發生時,會觸發Page回到INACTIVE狀態,
     系統將呼叫onInactive()回撥。此後,Page可能重新回到ACTIVE狀態,系統將再次呼叫onActive()回撥。
     因此,開發者通常需要成對實現onActive()和onInactive(),並在onActive()中獲取在onInactive()中被釋放的資源。
     */
    @Override
    public void onActive() {
        super.onActive();
    }
    /*
    onForeground()
      處於BACKGROUND狀態的Page仍然駐留在記憶體中,當重新回到前臺時(比如使用者重新導航到此Page),
      系統將先呼叫onForeground()回撥通知開發者,而後Page的生命週期狀態回到INACTIVE狀態。
      開發者應當在此回撥中重新申請在onBackground()中釋放的資源,最後Page的生命週期狀態進一步回到ACTIVE狀態,
      系統將透過onActive()回撥通知開發者使用者。
     */
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}
package com.example.myapplication.slice;

import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
//import ohos.global.systemres.ResourceTable;
import com.example.myapplication.ResourceTable;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.Text;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;

public class SecondAbilitySlice extends AbilitySlice {
    private static final int MY_MODULE = 200;

    @Override
    protected void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_second_slice);

        Text text = (Text) findComponentById(ResourceTable.Id_second_text);
        if(text != null){
            String myname = intent.getStringParam("name");
            final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, MY_MODULE, "MY_TAG_Tony"); //MY_MODULE=0x00201
            HiLog.info(label, "the myname is:", myname);
        }
        //這裡跟MailAbilitySlice中的作用一樣,找button元素,這個元素就是Go Back
        Button button=(Button) findComponentById(ResourceTable.Id_seconde_button);

        if(button != null){
            button.setClickedListener(new Component.ClickedListener() {
                @Override
                public void onClick(Component component) {
                    present(new MainAbilitySlice(),new Intent());
                }
            });
        }
    }
}

第三部分:兩個 Layout 佈局和一個 graphic 檔案內容

HarmonyOS (鴻蒙作業系統)你值得擁有

HarmonyOS (鴻蒙作業系統)你值得擁有

HarmonyOS (鴻蒙作業系統)你值得擁有

備註:

  1. 表示的是文字框,裡面的 ohos:text 表示文字的內容
  2. 表示的是按鈕,裡面的 ohos:id 表示元素的id值
  3. 裡面的 ohos:text 表示按鈕的文字內容
  4. 裡面的 ohos:background_element 表示背景(就是CSS)
  5. Graphic 資料夾下存放的是樣式檔案,在Button 和 Text 裡面可以引用這個裡面的樣式,如上圖中的第三張圖所示。
  6. 在開發過程中,如 layout 目錄下檔名和 id 值及 graphic 目錄下的檔名在IDE中是有聯想選擇的,有的會拼接上一些固定字串。
  7. Import 匯入第三方包時,一定要注意匯入是正確的,在開發過程中發現有同名包,但是不是我們想要使用的,就會一直報錯。

第四部分:執行後得到的效果圖如下所示(這裡選擇的裝置為 Iphone)

實現的場景非常的簡單,就是點選下面第一張圖中的 Go 時(綁定了 click 監聽事件),就跳轉到如下第二張圖中去,這裡是切換到了另一個 Slice 的 page。當再點選此張圖片中的 Go Back時,又能夠回到第一張圖的介面。

HarmonyOS (鴻蒙作業系統)你值得擁有

HarmonyOS (鴻蒙作業系統)你值得擁有

分類: 國際
時間: 2022-01-31

相關文章

糖尿病等基礎病患者易得新冠 感染新冠易誘發糖尿病:新冠大流行中的另一場大流行病

糖尿病等基礎病患者易得新冠 感染新冠易誘發糖尿病:新冠大流行中的另一場大流行病
最近,斯坦福大學微生物學家彼得·傑克遜收到了一位新冠肺炎康復患者的郵件,對方表示自己"在感染新冠病毒前沒有糖尿病,但如今卻每天都在服用大量的糖尿病藥物." 傑克遜稱,近段時間以來, ...

祖父感染新冠被養老院拒之門外!於是,悉尼姐妹自建了個新冠病房

祖父感染新冠被養老院拒之門外!於是,悉尼姐妹自建了個新冠病房
悉尼一位94歲老人因感染新冠病毒被養老院拒之門外, 於是他的兩個孫女為他在家特別DIY了一間"新冠病房",就近為祖父提供最好的照顧. 老人Ted Cavanagh此前因在養老院摔倒 ...

高血壓增加感染新冠肺炎的風險,有高血壓,還能不能打新冠疫苗?

高血壓增加感染新冠肺炎的風險,有高血壓,還能不能打新冠疫苗?
高血壓是新冠肺炎患者最常見的合併症,但尚不清楚不受控制的高血壓是否是感染的危險因素. 我們所知道的是,血壓控制是減輕疾病負擔的關鍵,即使可能對新冠肺炎的易感性沒有影響.這是因為高血壓會使患心血管疾病. ...

美國動物園的大貓們集體感染新冠,園方至今不知源頭是誰

美國動物園的大貓們集體感染新冠,園方至今不知源頭是誰
話說,過去一年多以來,動物感染新冠的新聞早就屢見不鮮, 但動物園中爆發集體感染,還是有些少見, 而在最近,美國接連發生了兩起這樣的事件.... 從9月初開始,美國國家動物園的管理員們就發現,自家的幾隻 ...

蒙古國首次報告動物感染新冠病毒病例

蒙古國首次報告動物感染新冠病毒病例
來源:央視新聞客戶端 當地時間9月17日,據蒙古國媒體報道,經過治療和護理,在該國首都烏蘭巴托附近河狸自然保護區內感染新冠病毒的51只河狸中,目前有47只已經治癒,另有4只死亡.據悉,這是蒙古國出現的 ...

心痛!越南一戶人家因感染新冠,三天之內三人病逝

心痛!越南一戶人家因感染新冠,三天之內三人病逝
從2019年末新冠爆發,全球已經有2.5億人感染, 455萬人因感染新冠死亡,多少個家庭就此分崩離析. 而越南目前疫情仍在肆虐,越南累計確診645萬,累計死亡16000多人. 近日,越南一戶人家接連三 ...

倫敦地鐵乘客擔憂感染新冠拒握扶手 摔落扶梯意外頻發

倫敦地鐵乘客擔憂感染新冠拒握扶手 摔落扶梯意外頻發
中新網9月18日電 據"中央社"18日報道,英國倫敦地鐵車站發生乘客摔落電扶梯的意外有增加傾向,其中一個原因可能跟乘客擔憂感染新冠.都避免手握扶手有關. 資料圖:英國倫敦地鐵. 倫 ...

全球唯一零感染新冠的朝鮮,卻被取消參賽資格,無緣北京冬奧會?

全球唯一零感染新冠的朝鮮,卻被取消參賽資格,無緣北京冬奧會?
據<環球時報>報道,國際奧委會公佈的一則訊息,因為之前朝鮮單方面做出決定,打算不參加2020年的東京奧運會,奧委會也做出了相應的判決,表示會對對方的參賽資格進行限制,這個限制一直維持到20 ...

日本國民女神感染新冠,肺部出現陰影緊急住院,卻遭網民圍攻

日本國民女神感染新冠,肺部出現陰影緊急住院,卻遭網民圍攻
8月的最後一天,日本媒體報道了綾瀨遙感染新冠住院的訊息! 綾瀨遙入院治療時,她的肺部已經出現陰影,無法順暢呼吸... 不過目前病情已經得到控制,身體狀況在慢慢好轉. 事務所公佈了她這次感染髮病的經過: ...

日本養老和醫療機構發生群體“突破感染”新冠病毒事件
據日本媒體報道,日本養老機構和醫療機構近日相繼發生群體"突破感染"新冠病毒事件. "突破感染"指完成新冠疫苗接種後發生的新冠病毒感染.日本福井縣政府22日公佈, ...

哈爾濱病例被網暴後親屬發聲,美國富豪太空回來發現全家感染新冠
[廣西:2名偷渡人員初步確定有1人核酸檢測呈陽性]據廣西寧明縣新冠肺炎疫情防控指揮部,兩名從越南偷渡到愛店鎮的越南籍人員在外地被查獲,經核酸檢測,初步確定其中一人核酸檢測呈陽性. [哈爾濱病例流調資訊 ...

太意外!美國億萬富翁“太空遊”歸來,竟發現全家感染新冠隔離!美國確診近4300萬,專家:病例數還將攀升

太意外!美國億萬富翁“太空遊”歸來,竟發現全家感染新冠隔離!美國確診近4300萬,專家:病例數還將攀升
券商中國 楊喻程/整理 美富翁"太空遊"回來竟發現全家染新冠 據新華國際報道,美國億萬富翁."全平民"太空"旅行團"成員賈裡德·艾薩克曼返回 ...

朱孝天自曝曾與妻子感染新冠,過去兩年收入微薄,感謝老婆不離棄

朱孝天自曝曾與妻子感染新冠,過去兩年收入微薄,感謝老婆不離棄
曾紅極一時的偶像男團F4,如今只有言承旭跟周渝民依舊活躍在娛樂圈,朱孝天與吳建豪似乎已經許多沒有推出戲劇作品,變得越來越低調. 10月7日晚,媒體公開朱孝天的最新專訪,他承認自己是"F4裡混 ...

一中國公民在韓國感染新冠離世 我駐韓使館表哀悼併發布提醒
來源:海外網 海外網10月9日電據中國駐韓國大使館微信公號訊息,不久前,一位40多歲的男性中國公民在韓確診感染新冠肺炎,突然病情加重送入重症室,經搶救無效不幸離世.據瞭解,該公民在韓從事建築業,一向身 ...

有中國公民在韓國感染新冠肺炎離世,中國使館哀悼,併發出提醒
不久前,一位40多歲的男性中國公民在韓確診感染新冠肺炎,突然病情加重送入重症室,經搶救無效不幸離世.據瞭解,該公民在韓從事建築業,一向身體健康,沒有其他病史.我館對此表示哀悼,併為家屬提供了必要協助. ...

RMC記者:拉比奧特感染新冠
直播吧10月9日訊 RMC記者:拉比奧特感染新冠 (迪克派)

一中國公民在韓國感染新冠離世,駐韓使館表示哀悼併發布提醒
不久前,一位40多歲的男性中國公民在韓確診感染新冠肺炎,突然病情加重送入重症室,經搶救無效不幸離世.據瞭解,該公民在韓從事建築業,一向身體健康,沒有其他病史.中國駐韓國大使館對此表示哀悼,併為家屬提供 ...

一中國公民在韓國感染新冠離世,駐韓使館釋出提醒
不久前,一位40多歲的男性中國公民在韓確診感染新冠肺炎,突然病情加重送入重症室,經搶救無效不幸離世.據瞭解,該公民在韓從事建築業,一向身體健康,沒有其他病史.我館對此表示哀悼,併為家屬提供了必要協助. ...

美國得克薩斯州州長候選人感染新冠病毒住院後仍抵制新冠疫苗
來源:央視新聞客戶端 當地時間10月10日,得克薩斯州州長候選人.前佛羅里達州國會議員艾倫·韋斯特(Allen West)在社交媒體發表宣告稱,自己感染新冠病毒住院將使他更加致力於反對接種新冠疫苗. ...

委內瑞拉前國防部長感染新冠後死亡 已被關押數年
來源:海外網 海外網10月13日電當地時間12日,委內瑞拉司法部長薩布釋出訊息稱,前國防部長勞爾·巴杜爾在感染新冠病毒後因心肺衰竭死亡.自2017年以來,他一直被關押在委內瑞拉國家情報局內. 據路透社 ...