HarmonyOS實戰(zhàn)—Hello World
寫在前面
昨天看了會HarmonyOS 發(fā)布會,感慨挺多,第一個國產(chǎn)終端分布式操作系統(tǒng),感覺是有時代意義的存在,感覺作為一個開發(fā)人員來說,要做出有意義的東西才行。所以耐不住好奇,學了一小會HarmonyOS開發(fā),沒有機器,只有一個在線模擬器,所以也沒辦法做分布式模擬,以后要是有機會整體學下。筆記都是文檔上的東西,建議大家直接看文檔學習:https://developer.harmonyos.com/cn/home0. 2021.6.02
全棧解耦
軟總線
超級終端連接
音畫同步:軟時鐘,抗干擾算法
應(yīng)用跨設(shè)備流轉(zhuǎn)(硬件抽象)
原子化服務(wù)卡片
渲染和邏輯的分離
建議小伙伴直接看文檔學習,IDE安裝教程啥的,全都有。文檔很詳細:
代碼:OpenHarmony
Demo:新建工程的文檔:創(chuàng)建和運行hello world
hello world代碼:git@gitee.com:liruilonger/harmony-os_-hello-world.git
MainAbility是應(yīng)用所具備能力的抽象
具體的頁面
實現(xiàn)一個按鈕的頁面,這快和安卓沒有啥區(qū)別。
package com.liruilong.myapplication.slice; import com.liruilong.myapplication.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Button; public class MainAbilitySlice extends AbilitySlice { /* * HarmonyOS提供了Ability和AbilitySlice兩個基礎(chǔ)類, * 一個有界面的Ability可以由一個或多個AbilitySlice構(gòu)成, * AbilitySlice主要用于承載單個頁面的具體邏輯實現(xiàn)和界面UI, * 是應(yīng)用顯示、運行和跳轉(zhuǎn)的最小單元。 * */ @Override public void onStart(Intent intent) { super.onStart(intent); //使用setUIContent方法加載“ability_main.xml”布局。 super.setUIContent(ResourceTable.Layout_ability_main); Button button = (Button) findComponentById(ResourceTable.Id_button); } @Override public void onActive() { super.onActive(); } @Override public void onForeground(Intent intent) { super.onForeground(intent); } }
java類的形式寫一個跳轉(zhuǎn)頁面
package com.liruilong.myapplication.slice; import com.liruilong.myapplication.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.colors.RgbColor; import ohos.agp.components.DependentLayout; import ohos.agp.components.Text; import ohos.agp.components.element.ShapeElement; import ohos.agp.components.DependentLayout.LayoutConfig; import ohos.agp.utils.Color; public class SecondAbilitySlice extends AbilitySlice { @Override public void onStart(Intent intent) { super.onStart(intent); // 聲明布局 DependentLayout myLayout = new DependentLayout(this); // 設(shè)置布局寬高 myLayout.setWidth(LayoutConfig.MATCH_PARENT); myLayout.setHeight(LayoutConfig.MATCH_PARENT); // 設(shè)置布局背景為白色 ShapeElement background = new ShapeElement(); background.setRgbColor(new RgbColor(255, 255, 255)); myLayout.setBackground(background); // 創(chuàng)建一個文本 Text text = new Text(this); text.setText("Hi there"); text.setWidth(LayoutConfig.MATCH_PARENT); text.setTextSize(100); text.setTextColor(Color.BLACK); // 設(shè)置文本的布局 DependentLayout.LayoutConfig textConfig = new DependentLayout.LayoutConfig(LayoutConfig.MATCH_CONTENT, LayoutConfig.MATCH_CONTENT); textConfig.addRule(LayoutConfig.CENTER_IN_PARENT); text.setLayoutConfig(textConfig); myLayout.addComponent(text); super.setUIContent(myLayout); } }
添加跳轉(zhuǎn)邏輯
@Override public void onStart(Intent intent) { super.onStart(intent); //使用setUIContent方法加載“ability_main.xml”布局。 super.setUIContent(ResourceTable.Layout_ability_main); Button button = (Button) findComponentById(ResourceTable.Id_button); // 點擊按鈕跳轉(zhuǎn)至第二個頁面 button.setClickedListener(listener -> present(new SecondAbilitySlice(), new Intent())); }
Ability
Ability概述
Ability是應(yīng)用所具備能力的抽象,也是應(yīng)用程序的重要組成部分。一個應(yīng)用可以具備多種能力(即可以包含多個Ability),HarmonyOS支持應(yīng)用以Ability為單位進行部署。Ability可以分為FA(Feature Ability)和PA(Particle Ability)兩種類型,每種類型為開發(fā)者提供了不同的模板,以便實現(xiàn)不同的業(yè)務(wù)功能。
FA支持Page Ability:Page模板是FA唯一支持的模板,用于提供與用戶交互的能力。一個Page實例可以包含一組相關(guān)頁面,每個頁面用一個AbilitySlice實例表示。
PA支持Service Ability和Data Ability:
Service模板:用于提供后臺運行任務(wù)的能力。
Data模板:用于對外部提供統(tǒng)一的數(shù)據(jù)訪問抽象。
在配置文件(config.json)中注冊Ability時,可以通過配置Ability元素中的“type”屬性來指定Ability模板類型,示例如下。
{ "app": { "bundleName": "com.liruilong.myapplication", "vendor": "liruilong", "version": { "code": 1000000, "name": "1.0.0" }, "apiVersion": { "compatible": 4, "target": 5, "releaseType": "Release" } }, "deviceConfig": {}, "module": { "package": "com.liruilong.myapplication", "name": ".MyApplication", "deviceType": [ "phone" ], "distro": { "deliveryWithInstall": true, "moduleName": "entry", "moduleType": "entry" }, "abilities": [ { "skills": [ { "entities": [ "entity.system.home" ], "actions": [ "action.system.home" ] } ], "orientation": "unspecified", "name": "com.liruilong.myapplication.MainAbility", "icon": "$media:icon", "description": "$string:mainability_description", "label": "$string:app_name", "type": "page", "launchType": "standard" } ] } }
其中,“type”的取值可以為“page”、“service”或“data”,分別代表Page模板、Service模板、Data模板。
Page模板(以下簡稱“Page”)是FA唯一支持的模板,用于提供與用戶交互的能力。一個Page可以由一個或多個AbilitySlice構(gòu)成,AbilitySlice是指應(yīng)用的單個頁面及其控制邏輯的總和。
當一個Page由多個AbilitySlice共同構(gòu)成時,這些AbilitySlice頁面提供的業(yè)務(wù)能力應(yīng)具有高度相關(guān)性。例如,新聞瀏覽功能可以通過一個Page來實現(xiàn),其中包含了兩個AbilitySlice:一個AbilitySlice用于展示新聞列表,另一個AbilitySlice用于展示新聞詳情。
雖然一個Page可以包含多個AbilitySlice,但是Page進入前臺時界面默認只展示一個AbilitySlice。默認展示的AbilitySlice是通過setMainRoute()方法來指定的。如果需要更改默認展示的AbilitySlice,可以通過addActionRoute()方法為此AbilitySlice配置一條路由規(guī)則。
public class MyAbility extends Ability { @Override public void onStart(Intent intent) { super.onStart(intent); // set the main route setMainRoute(MainSlice.class.getName()); // set the action route addActionRoute("action.pay", PaySlice.class.getName()); addActionRoute("action.scan", ScanSlice.class.getName()); } }
{ "module": { "abilities": [ { "skills":[ { "actions":[ "action.pay", "action.scan" ] } ] ... } ] ... } ... }
此時,當其他Page實例期望導(dǎo)航到此AbilitySlice時,可以在Intent中指定Action,詳見不同Page間導(dǎo)航。
Page生命周期的不同狀態(tài)轉(zhuǎn)換及其對應(yīng)的回調(diào),如圖1所示。
基于Service模板的Ability(以下簡稱“Service”)主要用于后臺運行任務(wù)(如執(zhí)行音樂播放、文件下載等),但不提供用戶交互界面。Service可由其他應(yīng)用或Ability啟動,即使用戶切換到其他應(yīng)用,Service仍將在后臺繼續(xù)運行。
Service是單實例的。在一個設(shè)備上,相同的Service只會存在一個實例。如果多個Ability共用這個實例,只有當與Service綁定的所有Ability都退出后,Service才能夠退出。由于Service是在主線程里執(zhí)行的,因此,如果在Service里面的操作時間過長,開發(fā)者必須在Service里創(chuàng)建新的線程來處理(詳見線程間通信),防止造成主線程阻塞,應(yīng)用程序無響應(yīng)。
與Page類似,Service也擁有生命周期,如圖1所示。根據(jù)調(diào)用方法的不同,其生命周期有以下兩種路徑:
啟動Service該Service在其他Ability調(diào)用startAbility()時創(chuàng)建,然后保持運行。其他Ability通過調(diào)用stopAbility()來停止Service,Service停止后,系統(tǒng)會將其銷毀。
連接Service該Service在其他Ability調(diào)用connectAbility()時創(chuàng)建,客戶端可通過調(diào)用disconnectAbility ()斷開連接。多個客戶端可以綁定到相同Service,而且當所有綁定全部取消后,系統(tǒng)即會銷毀該Service。
嗯,Demo沒法整,沒機器,只學理論感覺意義不大,所以以后在學!
HarmonyOS
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。