版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
UIAbility組件基礎(chǔ)Stage模型概述應(yīng)用模型是HarmonyOS為開(kāi)發(fā)者提供的應(yīng)用程序必備的組件和運(yùn)行機(jī)制。HarmonyOS先后提供了兩種應(yīng)用模型,分別是FA模型和Stage模型。從API9開(kāi)始HarmonyOS只支持Stage模型。Stage模型:UIAbility組件和EXtensionAbility組件WindowStageContextAbilityStageUIAbility組件概述UIAbility組件是一種包含UI界面的應(yīng)用組件,主要用于和用戶(hù)交互。UIAbility組件是系統(tǒng)調(diào)度的基本單元,為應(yīng)用提供繪制界面的窗口;一個(gè)UIAbility組件中可以通過(guò)多個(gè)頁(yè)面來(lái)實(shí)現(xiàn)一個(gè)功能模塊。每一個(gè)UIAbility組件實(shí)例,都對(duì)應(yīng)于一個(gè)最近任務(wù)列表中的任務(wù)。UIAbility組件概述使用UIAbility需要在module.json5配置文件的abilities標(biāo)簽中聲明UIAbility的名稱(chēng)、入口、標(biāo)簽等相關(guān)信息。UIAbility組件概述在module.json5配置文件中指定默認(rèn)啟動(dòng)的UIAbility。UIAbility組件生命周期默認(rèn)的啟動(dòng)模式,每次調(diào)用startAbility()方法時(shí),如果應(yīng)用進(jìn)程中該類(lèi)型的UIAbility實(shí)例已經(jīng)存在,則復(fù)用系統(tǒng)中的UIAbility實(shí)例。standard啟動(dòng)模式為標(biāo)準(zhǔn)實(shí)例模式,每次調(diào)用startAbility()方法時(shí),都會(huì)在應(yīng)用進(jìn)程中創(chuàng)建一個(gè)新的該類(lèi)型UIAbility實(shí)例。給創(chuàng)建的UIAbility實(shí)例綁定一個(gè)唯一的Key,每次調(diào)用startAbility()方法時(shí),都會(huì)詢(xún)問(wèn)應(yīng)用使用哪個(gè)Key對(duì)應(yīng)的UIAbility實(shí)例來(lái)響應(yīng)startAbility()請(qǐng)求。UIAbility組件啟動(dòng)模式singleton(單實(shí)例模式)standard(標(biāo)準(zhǔn)實(shí)例模式)specified(指定實(shí)例模式)UIAbility組件基本用法指定UIAbility的啟動(dòng)頁(yè)面UIAbility組件基本用法獲取UIAbility的上下文信息在UIAbility中可以通過(guò)this.context獲取UIAbility實(shí)例的上下文信息。UIAbility組件基本用法在頁(yè)面中獲取UIAbility實(shí)例的上下文信息,包括導(dǎo)入依賴(lài)資源context模塊和在組件中定義一個(gè)context變量?jī)蓚€(gè)部分。UIAbility組件交互UIAbility組件與UI頁(yè)面的交互基于發(fā)布訂閱模式來(lái)實(shí)現(xiàn),事件需要先訂閱后發(fā)布,訂閱者收到消息后進(jìn)行處理。ArkTS引擎實(shí)例內(nèi)部的一個(gè)全局對(duì)象,在ArkTS引擎實(shí)例內(nèi)部都能訪問(wèn)。EventHubglobalThis使用EventHub進(jìn)行數(shù)據(jù)通信1.在UIAbility中調(diào)用eventHub.on()方法注冊(cè)一個(gè)自定義事件“event1”。import
UIAbility
from
'@ohos.app.ability.UIAbility';const
TAG:
string
=
'[Example].[Entry].[EntryAbility]';export
default
class
EntryAbility
extends
UIAbility
{
func1(...data)
{
//
觸發(fā)事件,完成相應(yīng)的業(yè)務(wù)操作
console.info(TAG,
'1.
'
+
JSON.stringify(data));
}
onCreate(want,
launch)
{
//
獲取eventHub
let
eventhub
=
this.context.eventHub;
//
執(zhí)行訂閱操作
eventhub.on('event1',
this.func1);
eventhub.on('event1',
(...data)
=>
{
//
觸發(fā)事件,完成相應(yīng)的業(yè)務(wù)操作
console.info(TAG,
'2.
'
+
JSON.stringify(data));
});
}}使用EventHub進(jìn)行數(shù)據(jù)通信2.在UI界面中通過(guò)eventHub.emit()方法觸發(fā)該事件,在觸發(fā)事件的同時(shí),根據(jù)需要傳入?yún)?shù)信息。import
common
from
'@mon';@Entry@Componentstruct
Index
{
private
context
=
getContext(this)
as
common.UIAbilityContext;
eventHubFunc()
{
//
不帶參數(shù)觸發(fā)自定義“event1”事件
this.context.eventHub.emit('event1');
//
帶1個(gè)參數(shù)觸發(fā)自定義“event1”事件
this.context.eventHub.emit('event1',
1);
//
帶2個(gè)參數(shù)觸發(fā)自定義“event1”事件
this.context.eventHub.emit('event1',
2,
'test');
//
開(kāi)發(fā)者可以根據(jù)實(shí)際的業(yè)務(wù)場(chǎng)景設(shè)計(jì)事件傳遞的參數(shù)
}
//
頁(yè)面展示
build()
{
//
...
}}使用EventHub進(jìn)行數(shù)據(jù)通信3.運(yùn)行日志結(jié)果。4.在自定義事件“event1”使用完成后,可以根據(jù)需要調(diào)用eventHub.off()方法取消該事件的訂閱。//
context為UIAbility實(shí)例的AbilityContextthis.context.eventHub.off('event1');使用globalThis進(jìn)行數(shù)據(jù)同步1.啟動(dòng)UIAbility時(shí),會(huì)創(chuàng)建該UIAbility的實(shí)例,接著會(huì)調(diào)用后生命周期回調(diào)方法onCreate(),在onCreate方法中將數(shù)據(jù)綁定到globalThis上。import
UIAbility
from
'@ohos.app.ability.UIAbility'export
default
class
EntryAbility
extends
UIAbility
{
onCreate(want,
launch)
{
globalThis.testData
=
'globalThis測(cè)試數(shù)據(jù)';
//
...
}
//
...}使用globalThis進(jìn)行數(shù)據(jù)同步2.在UI界面中即可通過(guò)globalThis獲取到testData參數(shù)信息。@Entry@Componentstruct
Index
{
aboutToAppear()
{
let
data=
globalThis.testData;
(‘globalThis中的testData參數(shù):'+data)
}
//
頁(yè)面展示
build()
{
//
...
}}UIAbility組件間交互(設(shè)備內(nèi))啟動(dòng)應(yīng)用內(nèi)的UIAbility1.在EntryAbility中,通過(guò)調(diào)用startAbility()方法啟動(dòng)UIAbility。let
wantInfo
=
{
deviceId:
'',
//
deviceId為空表示本設(shè)備
bundleName:
'com.example.myapplication',
abilityName:
'SecondAbility',
moduleName:
'module1',
//
moduleName非必選
parameters:
{
//
自定義信息
info:
'來(lái)自EntryAbility
Index頁(yè)面',
},}//
context為調(diào)用方UIAbility的AbilityContextthis.context.startAbility(wantInfo).then(()
=>
{
//
...}).catch((err)
=>
{
//
...})UIAbility組件間交互(設(shè)備內(nèi))2.在SecondAbility的生命周期回調(diào)文件中接收EntryAbility傳遞過(guò)來(lái)的參數(shù)。import
UIAbility
from
'@ohos.app.ability.UIAbility';import
Window
from
'@ohos.window';export
default
class
SecondAbility
extends
UIAbility
{
onCreate(want,
launchParam)
{
//
接收調(diào)用方UIAbility傳過(guò)來(lái)的參數(shù)
let
secondAbilityWant
=
want;
let
info
=
secondAbilityWant?.parameters?.info;
//
...
}}UIAbility組件間交互(設(shè)備內(nèi))3.在SecondAbility業(yè)務(wù)完成之后,如需要停止當(dāng)前UIAbility實(shí)例,在SecondAbility中通過(guò)調(diào)用terminateSelf()方法實(shí)現(xiàn)。//
context為需要停止的UIAbility實(shí)例的AbilityContextthis.context.terminateSelf((err)
=>
{
//
...});UIAbility組件間交互(設(shè)備內(nèi))啟動(dòng)應(yīng)用內(nèi)的UIAbility并獲取返回結(jié)果1.在EntryAbility中,調(diào)用startAbilityForResult()接口啟動(dòng)SecondAbility。let
wantInfo
=
{
deviceId:
'',
//
deviceId為空表示本設(shè)備
bundleName:
'com.example.myapplication',
abilityName:
'SecondAbility',
moduleName:
'module1',
//
moduleName非必選
parameters:
{
//
自定義信息
info:
'來(lái)自EntryAbility
Index頁(yè)面',
},}//
context為調(diào)用方UIAbility的AbilityContextthis.context.startAbilityForResult(wantInfo).then((data)
=>
{
//
...}).catch((err)
=>
{
//
...})UIAbility組件間交互(設(shè)備內(nèi))2.在SecondAbility停止自身時(shí),需要調(diào)用terminateSelfWithResult()方法,入?yún)bilityResult為SecondAbility需要返回給EntryAbility的信息。const
RESULT_CODE:
number
=
1001;let
abilityResult
=
{
resultCode:
RESULT_CODE,
want:
{
bundleName:
'com.example.myapplication',
abilityName:
'SecondAbility',
moduleName:
'module1',
parameters:
{
info:
'來(lái)自SecondAbility
Index頁(yè)面',
},
},}//
context為被調(diào)用方UIAbility的AbilityContextthis.context.terminateSelfWithResult(abilityResult,
(err)
=>
{
//
...});UIAbility組件間交互(設(shè)備內(nèi))3.SecondAbility停止自身后,EntryAbility通過(guò)startAbilityForResult()方法回調(diào)接收被SecondAbility返回的信息,RESULT_CODE需要與前面的數(shù)值保持一致。const
RESULT_CODE:
number
=
1001;//
...//
context為調(diào)用方UIAbility的AbilityContextthis.context.startAbilityForResult(want).then((data)
=>
{
if
(data?.resultCode
===
RESULT_CODE)
{
//
解析被調(diào)用方UIAbility返回的信息
let
info
=
data.want?.parameters?.info;
//
...
}}).catch((err)
=>
{
//
...})首選項(xiàng)首選項(xiàng)概述首選項(xiàng)Preferences,適用于對(duì)Key-Value結(jié)構(gòu)的數(shù)據(jù)進(jìn)行存取和持久化操作。首選項(xiàng)基本概念Key-Value數(shù)據(jù)結(jié)構(gòu)一種鍵值型的數(shù)據(jù)結(jié)構(gòu)。Key是不重復(fù)的關(guān)鍵字,Value是數(shù)據(jù)值。在首選項(xiàng)中key的類(lèi)型是字符串類(lèi)型,Value的類(lèi)型包括數(shù)字型、字符串型、布爾型以及這3種類(lèi)型的數(shù)組類(lèi)型。非關(guān)系型數(shù)據(jù)庫(kù)區(qū)別于關(guān)系數(shù)據(jù)庫(kù),不保證遵循ACID(Atomic、Consistency、Isolation及Durability)特性,不采用關(guān)系模型來(lái)組織數(shù)據(jù),數(shù)據(jù)之間無(wú)關(guān)系。比如,以Key-Value數(shù)據(jù)結(jié)構(gòu)組成的數(shù)據(jù)庫(kù)。首選項(xiàng)概述運(yùn)作機(jī)制首選項(xiàng)概述約束和限制因Preferences實(shí)例會(huì)加載到內(nèi)存中,建議存儲(chǔ)的數(shù)據(jù)不超過(guò)一萬(wàn)條,并注意及時(shí)清理不再使用的實(shí)例,以便減少非內(nèi)存開(kāi)銷(xiāo)。數(shù)據(jù)中的Key為string類(lèi)型,要求非空且字符長(zhǎng)度不超過(guò)80個(gè)字節(jié)。當(dāng)數(shù)據(jù)中的Value為string類(lèi)型時(shí),允許為空,字符長(zhǎng)度不超過(guò)8192個(gè)字節(jié)。首選項(xiàng)的使用使用場(chǎng)景首選項(xiàng)功能通常用于保存應(yīng)用的一些常用配置信息,并不適合需要存儲(chǔ)大量數(shù)據(jù)和頻繁改變數(shù)據(jù)的場(chǎng)景。應(yīng)用的數(shù)據(jù)保存在文件中,這些文件可以持久化地存儲(chǔ)在設(shè)備上。接口說(shuō)明創(chuàng)建存儲(chǔ)實(shí)例數(shù)據(jù)處理數(shù)據(jù)持久化訂閱數(shù)據(jù)變更刪除數(shù)據(jù)文件首選項(xiàng)的使用創(chuàng)建存儲(chǔ)實(shí)例讀取指定文件,將數(shù)據(jù)加載到Preferences實(shí)例,即可創(chuàng)建一個(gè)存儲(chǔ)實(shí)例,用于數(shù)據(jù)操作。PreferencesAPI提供兩套接口來(lái)使用Preferences,一套使用Promise,另一套使用callback異步回調(diào)的方式。這里我們以callback異步回調(diào)為例:包名接口名描述ohos.data.preferencesgetPreferences(context:Context,name:string,callback:AsyncCallback<Preferences>):void讀取指定首選項(xiàng)持久化文件,將數(shù)據(jù)加載到Preferences實(shí)例,用于數(shù)據(jù)操作。首選項(xiàng)的使用數(shù)據(jù)處理數(shù)據(jù)處理是對(duì)Preference實(shí)例的數(shù)據(jù)進(jìn)行增刪改查。類(lèi)名接口名描述Preferencesput(key:string,value:ValueType,callback:AsyncCallback<void>):void支持存入值為number、string、boolean、Array<number>、Array<string>、Array<boolean>類(lèi)型的數(shù)據(jù)。Preferencesget(key:string,defValue:ValueType,callback:AsyncCallback<ValueType>):void支持獲取值為number、string、boolean、Array<number>、Array<string>、Array<boolean>類(lèi)型的數(shù)據(jù)。PreferencesgetAll(callback:AsyncCallback<Object>):void支持獲取含有所有鍵值的Object對(duì)象。Preferencesdelete(key:string,callback:AsyncCallback<void>):void支持從Preferences實(shí)例中刪除名為給定Key的存儲(chǔ)鍵值對(duì)。Preferenceshas(key:string,callback:AsyncCallback<boolean>):void檢查Preferences實(shí)例是否包含名為給定Key的存儲(chǔ)鍵值對(duì)首選項(xiàng)的使用數(shù)據(jù)持久化通過(guò)執(zhí)行flush方法,應(yīng)用可以將緩存的數(shù)據(jù)再次寫(xiě)回文本文件中進(jìn)行持久化存儲(chǔ)。類(lèi)名接口名描述Preferencesflush(callback:AsyncCallback<void>):void將Preferences實(shí)例通過(guò)異步線程回寫(xiě)入文件中。首選項(xiàng)的使用訂閱數(shù)據(jù)變更訂閱數(shù)據(jù)變更,訂閱的Key的值發(fā)生變更后,在執(zhí)行flush方法后,會(huì)觸發(fā)callback回調(diào)。類(lèi)名接口名描述Preferenceson(type:'change',callback:Callback<{key:string}>):void訂閱數(shù)據(jù)變更。Preferencesoff(type:'change',callback:Callback<{key:string}>):void注銷(xiāo)訂閱。首選項(xiàng)的使用刪除數(shù)據(jù)文件通過(guò)調(diào)用以下兩種接口,可以刪除數(shù)據(jù)實(shí)例或?qū)?yīng)的文件。類(lèi)名接口名描述ohos.data.preferencesdeletePreferences(context:Context,name:string,callback:AsyncCallback<void>)從緩存中移除已加載的Preferences對(duì)象,同時(shí)從設(shè)備上刪除對(duì)應(yīng)的文件。ohos.data.preferencesremovePreferencesFromCache(context:Context,name:string,callback:AsyncCallback<void>):void僅從緩存中移除已加載的Preferences對(duì)象,主要用于釋放內(nèi)存。首選項(xiàng)的使用-開(kāi)發(fā)步驟1.準(zhǔn)備工作,導(dǎo)入@ohos.data.preferences以及相關(guān)的模塊到開(kāi)發(fā)環(huán)境。importdata_preferencesfrom'@ohos.data.preferences';首選項(xiàng)的使用-開(kāi)發(fā)步驟2.獲取Preferences實(shí)例。讀取指定文件,將數(shù)據(jù)加載到Preferences實(shí)例,用于數(shù)據(jù)操作。import
UIAbility
from
'@ohos.app.ability.UIAbility';let
preferences
=
null;export
default
class
EntryAbility
extends
UIAbility
{
onWindowStageCreate(windowStage)
{
data_preferences.getPreferences(this.context,'mystore',function
(err,val){
if(err){
console.info(“獲取preferences實(shí)例失敗。"); return;
}
preferences
=
val;
});
}}首選項(xiàng)的使用-開(kāi)發(fā)步驟3.存入數(shù)據(jù)。使用put方法保存數(shù)據(jù)到緩存的實(shí)例中。preferences.put('startup','auto',function
(err,val){
if(err){
console.info("保存startup鍵值對(duì)失敗,失敗原因:"+err);
return;
}
console.info(“保存startup鍵值對(duì)成功。");});首選項(xiàng)的使用-開(kāi)發(fā)步驟4.讀取數(shù)據(jù)。使用get方法讀取數(shù)據(jù)。preferences.get('startup','default',function
(err,val){
if(err){
console.info("讀取startup鍵值對(duì)失敗,失敗原因:"+err);
return;
}
console.info("讀取startup的數(shù)據(jù)為:"+val);});首選項(xiàng)的使用-開(kāi)發(fā)步驟5.數(shù)據(jù)持久化。應(yīng)用存入數(shù)據(jù)到Preferences實(shí)例后,可以通過(guò)flush方法將Preferences實(shí)例回寫(xiě)到文件中。preferences.flush();首選項(xiàng)的使用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)村自建房承建與農(nóng)村新能源利用合作合同
- 二零二五年度形婚雙方婚姻關(guān)系協(xié)議及婚后財(cái)產(chǎn)分割與子女撫養(yǎng)安排3篇
- 二零二五年度文化創(chuàng)意產(chǎn)業(yè)園區(qū)場(chǎng)地轉(zhuǎn)租合同3篇
- 2025年度高新技術(shù)研發(fā)貸款擔(dān)保協(xié)議3篇
- 2025年度消防安全設(shè)施設(shè)備安裝與驗(yàn)收協(xié)議3篇
- 2025年度內(nèi)墻粉刷施工與室內(nèi)空氣凈化技術(shù)合作合同3篇
- 二零二五年度生豬養(yǎng)殖與農(nóng)產(chǎn)品市場(chǎng)銷(xiāo)售合作合同范本3篇
- 2025年度公司對(duì)個(gè)人創(chuàng)業(yè)團(tuán)隊(duì)對(duì)賭合同3篇
- 二零二五年度企業(yè)車(chē)輛共享平臺(tái)使用服務(wù)合同3篇
- 2025年度公司與公司簽訂的體育產(chǎn)業(yè)合作發(fā)展協(xié)議2篇
- 領(lǐng)導(dǎo)科學(xué)全套精講課件
- 粵教版地理七年級(jí)下冊(cè)全冊(cè)課件
- 排水管渠及附屬構(gòu)筑物
- 養(yǎng)豬場(chǎng)施工噪聲環(huán)境影響分析
- Windows-Server-2012網(wǎng)絡(luò)服務(wù)架構(gòu)課件(完整版)
- 形位公差_很詳細(xì)(基礎(chǔ)教育)
- 手榴彈使用教案
- 600MW機(jī)組除氧器水位控制系統(tǒng)
- 史上最全的涉稅風(fēng)險(xiǎn)
- 初中數(shù)學(xué)問(wèn)題情境的創(chuàng)設(shè)
- 電力設(shè)備典型消防規(guī)程.ppt
評(píng)論
0/150
提交評(píng)論