更多内容请访问:Harmonyos技术社区https://harmonyos.51cto.com,与华为官方HarmonyOSUI框架共同建立,提供界面绘制相关的处理方法,如as:图形控件、页面布局和窗口管理(如图1所示)。图1UI框架HarmonyOSUI框架采用ACE(AbilityCrossplatformEnvironment)框架(如图2所示)。ACE是一个应用程序开发框架。它属于操作系统架构之上的上层框架。目前支持JAVA和JS语言开发。两种语言框架的具体区别如下:1.JAVAUI框架提供细粒度的UI编程接口,使应用更加灵活,元素以组件和布局的形式在窗口上绘制界面。2、JSUI框架采用类HTML和类CSS的声明式编程语言作为页面布局和页面样式的开发语言,页面业务逻辑支持ECMAScript规范的JavaScript语言。JSUI框架提供的声明式编程,让开发者无需为UI状态切换编写代码,视图配置信息更加直观。图2ACEUI框架HarmonyOSUI框架关键技术ACEJAVAUI框架应用程序组成能力。能力分为FA(FeatureAbility)和PA(ParticleAbility)两种。?FeatureAbility(简称FA)支持PageAbility,一般用于用户交互,在屏幕上显示一个用户界面,用于显示用户可以查看和交互的所有内容。用户界面由UI元素组成,通常包括布局、控件等,元素支持设置资源和动画。?ParticleAbility支持DataAbility(数据访问)和ServiceAbility(后台服务),一般用于后台业务逻辑的实现。图3JAVAUI1.界面组成每个用户界面的UI元素由一棵组件树组成,即由Component和ComponentContainer对象组成(如图4所示)。JavaUI框架提供了Component和ComponentContainer的一些具体子类,即创建用户界面(UI)的各种组件,包括一些常用组件(如:文本、按钮、图片、列表等)和常用组件布局(例如:DirectionalLayout和DependentLayout)等。用户可以与组件交互并获得响应。●Component:提供内容展示,是界面中所有组件的基类。●ComponentContainer:将Component或ComponentContainer对象作为容器进行放置。图4JAVAUI组件树II.AbilityPageAbility的组成一个Page可以由一个或多个AbilitySlice组成,AbilitySlice是指应用的单个页面及其控制逻辑的总和。图5PageAbility构成Ability的生命周期●onStart()该回调在系统第一次创建Page实例时触发。●onActive()页面进入INACTIVE状态后会回到前台,然后系统调用该回调。之后Page进入ACTIVE状态,也就是应用与用户交互的状态。●onInactive()当Page失去焦点时,系统会调用该回调,Page进入INACTIVE状态。●onBackground()如果Page不再对用户可见,系统将调用此回调,之后Page进入Background状态。●onForeground()的Background状态的Page仍然驻留在内存中。回到前台时,系统会先调用onForeground()回调通知开发者,然后Page生命周期状态回到INACTIVE状态。●onStop()下面是几个主要的生命周期函数。当系统即将销毁页面时,会触发该回调函数。具体的生命周期过程如下图所示:图6JavaFA生命周期JavaAbility路由JavaFA提供了三种路由方式:Abilities之间跳转(不同的Abilities)Ability内部AbilitySlice之间跳转图7JavaFA路由1.JumpbetweenAbilities(不同的Abilities):当一个Ability跳转到另一个Ability时,根据不同的动作选择不同的Slices。示例代码如下:Intentintent=newIntent();Operationoperation=newIntent.OperationBuilder().withAction("action2").build();intent.setOperation(operation);startAbility(intent);如图7所示,Ability3通过addActionRoute接口配置了三个路由规则Router:action1路由到AbilitySlice1;action2路由到AbilitySlice2;action3被路由到AbilitySlice3。Ability1和Ability2分别通过startAbility跳转到Ability3,然后根据三个路由规则选择自己对应的AbilitySlices。其顺序如图8所示:图8在Ability2之间跳转当Ability2初始化时,通过addActionRoute接口设置路由规则。当Ability1通过startAbilityForResult跳转到Ability2时,Ability2根据action选择AbilitySlice1或AbilitySlice2。当Ability2关闭返回时,Ability1通过onAbilityResult()回调方法处理请求结果。2、Ability内AbilitySlice间跳转当发起导航的AbilitySlice和作为导航目标的AbilitySlice在同一个Ability中时,可以通过present()或presentForResult()方法实现导航。对于同一Page内的AbilitySlice导航,只需要指定目标AbilitySlice的名称即可。AbilitySlice1通过present方法发起跳转,指定目标名称为AbilitySlice2,则跳转结果为显示AbilitySlice2。示例代码如下:present(newAbilitySlice2(),newIntent());其时序如图9所示:图9AbilitySlices之间的跳转Ability3包括三个AbilitySlice,AbilitySlice1,AbilitySlice2,AbilitySlice3,默认接口在初始化时通过setMainRoute方法设置。能力切片1。AbilitySlice1可以通过present()向AbilitySlice2发起导航,导航完成后界面显示AbilitySlice2。AbilitySlice1如果想在从导航目标AbilitySlice3返回时获取其返回结果,可以使用presentForResult()实现导航。当AbilitySlice3返回时,系统会回调onResult()给AbilitySlice1接收并处理返回结果,其中返回结果由AbilitySlice3在其生命周期中通过setResult()设置。3.跨设备跳转Ability还支持跨设备路由,即目标Ability可以是本设备的Ability,也可以是同一用户的不同设备。使用startAbility路由时,只需通过withDeviceId指定对端的设备id即可。如图10所示:Ability1通过action选择到Ability2的路由,并通过withDeviceId指定目标设备B,那么最终的结果就是设备B上Ability2对应的接口被拉起显示。图10跨设备路由4.资源管理JAVAUI框架下的资源管理目录如下:图12JAVAUI下的资源目录结构示例代码如下:在Java文件中,引用string.json类型为“String”且名称为“app_name”资源的文件:ohos.global.resource.ResourceManagerresManager=this.getResourceManager();Stringresult=resManager.getElement(ResourceTable.String_app_name).getString();在XML文件中,引用string.json文件中的类型是“String”,Resource名为“app_name”:
