Ability内页面间的跳转(ArkTS)
基本概念
页面路由:提供通过不同的url访问不同的页面,包括跳转到应用内的指定页面、用应用内的某个页面替换当前页面、返回上一页面或指定的页面等。
主要代码解析
代码结构如下
先看entryability.ets

在commonconstant.ets定义了一系列常量,用在别的文件(本例的indexpage和secondpage)
比如这里的赋值,初始化
再来看indexpage.ets
Secondpage同理
问题和总结
Runtimeos指定了目标操作系统,这里我是在harmonyos上跑的,所以会有error
UIAbility内和UIAbility间页面的跳转(ArkTS)
相关概念
UIAbility组件概述:UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。
UIAbilityContext:UIAbilityContext是UIAbility的上下文环境,继承自Context,提供UIAbility的相关配置信息以及操作UIAbility和ServiceExtensionAbility的方法。
页面路由:提供通过不同的url访问不同的页面,包括跳转到应用内的指定页面、用应用内的某个页面替换当前页面、返回上一页面或指定的页面等。
Text:文本组件,用于呈现一段文本信息。
Button:按钮组件,可快速创建不同样式的按钮。
主要代码解析
这个直接用url访问page
这个的实现逻辑看下一张图
用want 意图参数 启动ability
代码和模拟运行
跨ability的page似乎打不开
???
现在的问题是虚拟机上跑不起来secondability的两个page,直接运行device可以,但通过click调用启动函数没有反应,检查日志也没发现异常
Stage模型下Ability的创建和使用(ArkTS)
基本概念
- UIAbility:UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口;一个UIAbility组件中可以通过多个页面来实现一个功能模块。每一个UIAbility组件实例,都对应于一个最近任务列表中的任务。
- UIAbilityContext:UIAbilityContext是UIAbility的上下文环境,继承自Context,提供UIAbility的相关配置信息以及操作UIAbility和ServiceExtensionAbility的方法,如启动UIAbility,停止当前UIAbilityContext所属的UIAbility,启动、停止、连接、断开连接ServiceExtensionAbility等。
- Want:Want是对象间信息传递的载体, 可以用于应用组件间的信息传递。 Want的使用场景之一是作为startAbility的参数, 其包含了指定的启动目标, 以及启动时需携带的相关数据。
- HiLog:HiLog日志系统,让应用可以按照指定类型、指定级别、指定格式字符串输出日志内容,帮助开发者了解应用的运行状态,更好地调试程序。
代码详解
代码结构如下
这个代码的两个入口都是.ts写的,不同于.ets,这个代码可能更底层也适用于更早期的版本
Entryability定义了程序的入口,通过helloworld我们知道,entryability是自动创建的,一般不需要改动,所以这里我们先看detailability,这个ability会在index页面被用want调用
在viewmodel里可以看到定义页面跳转以及视图交互的.ets,重点看homeviewmodel.ets
Want是对象间信息传递的载体, 可以用于应用组件间的信息传递。Want的使用场景之一是作为startAbility的参数, 其包含了指定的启动目标, 以及启动时需携带的相关数据。 在购物应用的EntryAbility中,我们使用startDetailsAbility方法启动DetailsAbility,并在代码中指定了Want的具体参数,并使用parameters参数传递商品信息。
使用HiLog打印生命周期函数
HiLog日志系统可以让应用按照指定类型、指定级别、指定格式字符串打印日志内容,帮助开发者了解应用/服务的运行状态,更好地调试程序。
HiLog提供了debug、info、warn、error以及fatal接口,在购物应用中,我们使用hilog打印EntryAbility 、DetailsAbility的生命周期。
在打印之前,我们需要了解三个参数:
- domain:日志对应的领域标识,范围是0x0~0xFFFF。建议开发者在应用内根据需要自定义划分。
- tag:指定日志标识,可以为任意字符串,建议用于标识调用所在的类或者业务行为。
- level:日志级别。
- format:格式字符串,用于日志的格式化输出。格式字符串中可以设置多个参数,参数需要包含参数类型、隐私标识。隐私标识分为{public}和{private},缺省为{private}。标识{public}的内容明文输出,标识{private}的内容以<private>过滤回显。
运行和问题
UIAbility和自定义组件生命周期(ArkTS)
基本概念
UIAbility:UIAbility是包含UI界面的应用组件,提供组件创建、销毁、前后台切换等生命周期回调,同时也具备组件协同的能力。
自定义组件的生命周期:自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。
窗口开发指导:窗口模块用于在同一块物理屏幕上,提供多个应用界面显示、交互的机制。
当用户打开、切换和返回到应用时,UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,UIAbility实例的创建和销毁,或者UIAbility实例发生了前后台的状态切换。Create、Foreground、Background、Destroy四个状态。
代码详解
第一个状态creat
在UIability生命周期里,应用首次创建进程时触发,此时系统调用oncreat“回调”
Foreground和Background状态
Foreground和Background状态分别在UIAbility实例切换至前台和切换至后台时触发,对应于onForeground\(\)回调和onBackground\(\)回调。
- onForeground()回调,在UIAbility的UI界面可见之前,如UIAbility切换至前台时触发。可以在onForeground()回调中申请系统需要的资源,或者重新申请在onBackground()中释放的资源。
- onBackground()回调,在UIAbility的UI界面完全不可见之后,如UIAbility切换至后台时触发。可以在onBackground()回调中释放UI界面不可见时无用的资源,或者在此回调中执行较为耗时的操作,例如状态保存等。
例如应用在使用过程中需要使用用户定位时,假设应用已获得用户的定位权限授权。在UI界面显示之前,可以在onForeground\(\)回调中开启定位功能,从而获取到当前的位置信息。
当应用切换到后台状态,可以在onBackground\(\)回调中停止定位功能,以节省系统的资源消耗。
Destory状态
Destroy状态在UIAbility实例销毁时触发。可以在onDestroy\(\)回调中进行系统资源的释放、数据的保存等操作。
例如调用terminateSelf\(\)方法停止当前UIAbility实例,从而完成UIAbility实例的销毁;或者用户使用最近任务列表关闭该UIAbility实例,完成UIAbility的销毁。
自定义组件周期
自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。
允许在生命周期函数中使用Promise和异步回调函数,比如网络资源获取,定时器设置等。
自定义组件的生命周期包括aboutToAppear、onPageShow、onPageHide、onBackPress、aboutToDisappear五种状态
下面介绍各状态功能