版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
UIAbility组件基础Stage模型概述应用模型是HarmonyOS为开发者提供的应用程序必备的组件和运行机制。HarmonyOS先后提供了两种应用模型,分别是FA模型和Stage模型。从API9开始HarmonyOS只支持Stage模型。Stage模型:UIAbility组件和EXtensionAbility组件WindowStageContextAbilityStageUIAbility组件概述UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口;一个UIAbility组件中可以通过多个页面来实现一个功能模块。每一个UIAbility组件实例,都对应于一个最近任务列表中的任务。UIAbility组件概述使用UIAbility需要在module.json5配置文件的abilities标签中声明UIAbility的名称、入口、标签等相关信息。UIAbility组件概述在module.json5配置文件中指定默认启动的UIAbility。UIAbility组件生命周期默认的启动模式,每次调用startAbility()方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用系统中的UIAbility实例。standard启动模式为标准实例模式,每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例。给创建的UIAbility实例绑定一个唯一的Key,每次调用startAbility()方法时,都会询问应用使用哪个Key对应的UIAbility实例来响应startAbility()请求。UIAbility组件启动模式singleton(单实例模式)standard(标准实例模式)specified(指定实例模式)UIAbility组件基本用法指定UIAbility的启动页面UIAbility组件基本用法获取UIAbility的上下文信息在UIAbility中可以通过this.context获取UIAbility实例的上下文信息。UIAbility组件基本用法在页面中获取UIAbility实例的上下文信息,包括导入依赖资源context模块和在组件中定义一个context变量两个部分。UIAbility组件交互UIAbility组件与UI页面的交互基于发布订阅模式来实现,事件需要先订阅后发布,订阅者收到消息后进行处理。ArkTS引擎实例内部的一个全局对象,在ArkTS引擎实例内部都能访问。EventHubglobalThis使用EventHub进行数据通信1.在UIAbility中调用eventHub.on()方法注册一个自定义事件“event1”。import
UIAbility
from
'@ohos.app.ability.UIAbility';const
TAG:
string
=
'[Example].[Entry].[EntryAbility]';export
default
class
EntryAbility
extends
UIAbility
{
func1(...data)
{
//
触发事件,完成相应的业务操作
console.info(TAG,
'1.
'
+
JSON.stringify(data));
}
onCreate(want,
launch)
{
//
获取eventHub
let
eventhub
=
this.context.eventHub;
//
执行订阅操作
eventhub.on('event1',
this.func1);
eventhub.on('event1',
(...data)
=>
{
//
触发事件,完成相应的业务操作
console.info(TAG,
'2.
'
+
JSON.stringify(data));
});
}}使用EventHub进行数据通信2.在UI界面中通过eventHub.emit()方法触发该事件,在触发事件的同时,根据需要传入参数信息。import
common
from
'@mon';@Entry@Componentstruct
Index
{
private
context
=
getContext(this)
as
common.UIAbilityContext;
eventHubFunc()
{
//
不带参数触发自定义“event1”事件
this.context.eventHub.emit('event1');
//
带1个参数触发自定义“event1”事件
this.context.eventHub.emit('event1',
1);
//
带2个参数触发自定义“event1”事件
this.context.eventHub.emit('event1',
2,
'test');
//
开发者可以根据实际的业务场景设计事件传递的参数
}
//
页面展示
build()
{
//
...
}}使用EventHub进行数据通信3.运行日志结果。4.在自定义事件“event1”使用完成后,可以根据需要调用eventHub.off()方法取消该事件的订阅。//
context为UIAbility实例的AbilityContextthis.context.eventHub.off('event1');使用globalThis进行数据同步1.启动UIAbility时,会创建该UIAbility的实例,接着会调用后生命周期回调方法onCreate(),在onCreate方法中将数据绑定到globalThis上。import
UIAbility
from
'@ohos.app.ability.UIAbility'export
default
class
EntryAbility
extends
UIAbility
{
onCreate(want,
launch)
{
globalThis.testData
=
'globalThis测试数据';
//
...
}
//
...}使用globalThis进行数据同步2.在UI界面中即可通过globalThis获取到testData参数信息。@Entry@Componentstruct
Index
{
aboutToAppear()
{
let
data=
globalThis.testData;
(‘globalThis中的testData参数:'+data)
}
//
页面展示
build()
{
//
...
}}UIAbility组件间交互(设备内)启动应用内的UIAbility1.在EntryAbility中,通过调用startAbility()方法启动UIAbility。let
wantInfo
=
{
deviceId:
'',
//
deviceId为空表示本设备
bundleName:
'com.example.myapplication',
abilityName:
'SecondAbility',
moduleName:
'module1',
//
moduleName非必选
parameters:
{
//
自定义信息
info:
'来自EntryAbility
Index页面',
},}//
context为调用方UIAbility的AbilityContextthis.context.startAbility(wantInfo).then(()
=>
{
//
...}).catch((err)
=>
{
//
...})UIAbility组件间交互(设备内)2.在SecondAbility的生命周期回调文件中接收EntryAbility传递过来的参数。import
UIAbility
from
'@ohos.app.ability.UIAbility';import
Window
from
'@ohos.window';export
default
class
SecondAbility
extends
UIAbility
{
onCreate(want,
launchParam)
{
//
接收调用方UIAbility传过来的参数
let
secondAbilityWant
=
want;
let
info
=
secondAbilityWant?.parameters?.info;
//
...
}}UIAbility组件间交互(设备内)3.在SecondAbility业务完成之后,如需要停止当前UIAbility实例,在SecondAbility中通过调用terminateSelf()方法实现。//
context为需要停止的UIAbility实例的AbilityContextthis.context.terminateSelf((err)
=>
{
//
...});UIAbility组件间交互(设备内)启动应用内的UIAbility并获取返回结果1.在EntryAbility中,调用startAbilityForResult()接口启动SecondAbility。let
wantInfo
=
{
deviceId:
'',
//
deviceId为空表示本设备
bundleName:
'com.example.myapplication',
abilityName:
'SecondAbility',
moduleName:
'module1',
//
moduleName非必选
parameters:
{
//
自定义信息
info:
'来自EntryAbility
Index页面',
},}//
context为调用方UIAbility的AbilityContextthis.context.startAbilityForResult(wantInfo).then((data)
=>
{
//
...}).catch((err)
=>
{
//
...})UIAbility组件间交互(设备内)2.在SecondAbility停止自身时,需要调用terminateSelfWithResult()方法,入参abilityResult为SecondAbility需要返回给EntryAbility的信息。const
RESULT_CODE:
number
=
1001;let
abilityResult
=
{
resultCode:
RESULT_CODE,
want:
{
bundleName:
'com.example.myapplication',
abilityName:
'SecondAbility',
moduleName:
'module1',
parameters:
{
info:
'来自SecondAbility
Index页面',
},
},}//
context为被调用方UIAbility的AbilityContextthis.context.terminateSelfWithResult(abilityResult,
(err)
=>
{
//
...});UIAbility组件间交互(设备内)3.SecondAbility停止自身后,EntryAbility通过startAbilityForResult()方法回调接收被SecondAbility返回的信息,RESULT_CODE需要与前面的数值保持一致。const
RESULT_CODE:
number
=
1001;//
...//
context为调用方UIAbility的AbilityContextthis.context.startAbilityForResult(want).then((data)
=>
{
if
(data?.resultCode
===
RESULT_CODE)
{
//
解析被调用方UIAbility返回的信息
let
info
=
data.want?.parameters?.info;
//
...
}}).catch((err)
=>
{
//
...})首选项首选项概述首选项Preferences,适用于对Key-Value结构的数据进行存取和持久化操作。首选项基本概念Key-Value数据结构一种键值型的数据结构。Key是不重复的关键字,Value是数据值。在首选项中key的类型是字符串类型,Value的类型包括数字型、字符串型、布尔型以及这3种类型的数组类型。非关系型数据库区别于关系数据库,不保证遵循ACID(Atomic、Consistency、Isolation及Durability)特性,不采用关系模型来组织数据,数据之间无关系。比如,以Key-Value数据结构组成的数据库。首选项概述运作机制首选项概述约束和限制因Preferences实例会加载到内存中,建议存储的数据不超过一万条,并注意及时清理不再使用的实例,以便减少非内存开销。数据中的Key为string类型,要求非空且字符长度不超过80个字节。当数据中的Value为string类型时,允许为空,字符长度不超过8192个字节。首选项的使用使用场景首选项功能通常用于保存应用的一些常用配置信息,并不适合需要存储大量数据和频繁改变数据的场景。应用的数据保存在文件中,这些文件可以持久化地存储在设备上。接口说明创建存储实例数据处理数据持久化订阅数据变更删除数据文件首选项的使用创建存储实例读取指定文件,将数据加载到Preferences实例,即可创建一个存储实例,用于数据操作。PreferencesAPI提供两套接口来使用Preferences,一套使用Promise,另一套使用callback异步回调的方式。这里我们以callback异步回调为例:包名接口名描述ohos.data.preferencesgetPreferences(context:Context,name:string,callback:AsyncCallback<Preferences>):void读取指定首选项持久化文件,将数据加载到Preferences实例,用于数据操作。首选项的使用数据处理数据处理是对Preference实例的数据进行增删改查。类名接口名描述Preferencesput(key:string,value:ValueType,callback:AsyncCallback<void>):void支持存入值为number、string、boolean、Array<number>、Array<string>、Array<boolean>类型的数据。Preferencesget(key:string,defValue:ValueType,callback:AsyncCallback<ValueType>):void支持获取值为number、string、boolean、Array<number>、Array<string>、Array<boolean>类型的数据。PreferencesgetAll(callback:AsyncCallback<Object>):void支持获取含有所有键值的Object对象。Preferencesdelete(key:string,callback:AsyncCallback<void>):void支持从Preferences实例中删除名为给定Key的存储键值对。Preferenceshas(key:string,callback:AsyncCallback<boolean>):void检查Preferences实例是否包含名为给定Key的存储键值对首选项的使用数据持久化通过执行flush方法,应用可以将缓存的数据再次写回文本文件中进行持久化存储。类名接口名描述Preferencesflush(callback:AsyncCallback<void>):void将Preferences实例通过异步线程回写入文件中。首选项的使用订阅数据变更订阅数据变更,订阅的Key的值发生变更后,在执行flush方法后,会触发callback回调。类名接口名描述Preferenceson(type:'change',callback:Callback<{key:string}>):void订阅数据变更。Preferencesoff(type:'change',callback:Callback<{key:string}>):void注销订阅。首选项的使用删除数据文件通过调用以下两种接口,可以删除数据实例或对应的文件。类名接口名描述ohos.data.preferencesdeletePreferences(context:Context,name:string,callback:AsyncCallback<void>)从缓存中移除已加载的Preferences对象,同时从设备上删除对应的文件。ohos.data.preferencesremovePreferencesFromCache(context:Context,name:string,callback:AsyncCallback<void>):void仅从缓存中移除已加载的Preferences对象,主要用于释放内存。首选项的使用-开发步骤1.准备工作,导入@ohos.data.preferences以及相关的模块到开发环境。importdata_preferencesfrom'@ohos.data.preferences';首选项的使用-开发步骤2.获取Preferences实例。读取指定文件,将数据加载到Preferences实例,用于数据操作。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实例失败。"); return;
}
preferences
=
val;
});
}}首选项的使用-开发步骤3.存入数据。使用put方法保存数据到缓存的实例中。preferences.put('startup','auto',function
(err,val){
if(err){
console.info("保存startup键值对失败,失败原因:"+err);
return;
}
console.info(“保存startup键值对成功。");});首选项的使用-开发步骤4.读取数据。使用get方法读取数据。preferences.get('startup','default',function
(err,val){
if(err){
console.info("读取startup键值对失败,失败原因:"+err);
return;
}
console.info("读取startup的数据为:"+val);});首选项的使用-开发步骤5.数据持久化。应用存入数据到Preferences实例后,可以通过flush方法将Preferences实例回写到文件中。preferences.flush();首选项的使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度商业展示场地代理租赁服务协议3篇
- 2025年度户外广告牌设计与制作环保材料采购合同3篇
- 2025年度农产品代理售后服务质量提升合同
- 2025版二零二五年度蜘蛛人高空作业安全装备维修与保养合同3篇
- 2024年水电安装及维修专业承包协议
- 2024年独家购房信息保密及市场禁入合同范本6篇
- 2024年租房合同模板下载3篇
- 2025版窗帘艺术定制与承包服务协议3篇
- 2024年版大理石定制安装协议模板
- 2024影院空气质量改善及消毒合同
- 铁路技术管理规程-20220507141239
- 2024年公安机关招警面试题及参考答案
- 国家开放大学2024年(202401-202407)《2667绩效与薪酬实务》期末考试真题
- 植物学智慧树知到答案2024年浙江大学
- 房地产抵押贷款公证合同模板
- 矿山开采与生产管理
- 糖尿病的预防及治疗幻灯片
- 综合能力测试(一)附有答案
- 大学体育与健康智慧树知到期末考试答案章节答案2024年齐鲁师范学院
- 化学实验操作评分细则表
- 西安市莲湖区2022-2023学年七年级上学期期末语文试题【带答案】
评论
0/150
提交评论