《HarmonyOS應(yīng)用開(kāi)發(fā)基礎(chǔ)》 課件 知識(shí)點(diǎn) 單元3 Stage模型下的業(yè)務(wù)能力開(kāi)發(fā)_第1頁(yè)
《HarmonyOS應(yīng)用開(kāi)發(fā)基礎(chǔ)》 課件 知識(shí)點(diǎn) 單元3 Stage模型下的業(yè)務(wù)能力開(kāi)發(fā)_第2頁(yè)
《HarmonyOS應(yīng)用開(kāi)發(fā)基礎(chǔ)》 課件 知識(shí)點(diǎn) 單元3 Stage模型下的業(yè)務(wù)能力開(kāi)發(fā)_第3頁(yè)
《HarmonyOS應(yīng)用開(kāi)發(fā)基礎(chǔ)》 課件 知識(shí)點(diǎn) 單元3 Stage模型下的業(yè)務(wù)能力開(kāi)發(fā)_第4頁(yè)
《HarmonyOS應(yīng)用開(kāi)發(fā)基礎(chǔ)》 課件 知識(shí)點(diǎn) 單元3 Stage模型下的業(yè)務(wù)能力開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論