当前位置: 首页 > 科技观察

鸿蒙应用程序Ability(能力)看这一篇就够

时间:2023-03-22 10:40:16 科技观察

HarmonyosappAbility(能力)看这篇文章就够了在一个Android应用中,Activity是整个应用的核心,也就是活动的意思。活动和能力都是表现形式。虽然直译比较抽象,但是如果我们把它们理解为函数,就更方便了。就目前的单一设备来说,我们可以用手机打电话、发短信、玩游戏等等,这些都是手机的能力。生活中,能力的体现无处不在。例如,电饭煲具有煮汤的能力;电视可以播放视频;立体声音响具有播放音乐的能力。但是HarmonyOS分布式系统要实现的不仅仅是一个单一的能力,而是要达到的效果是能力可以独立存在,相互关联,可以相互调用和迁移。比如可以将手机播放的视频迁移到智慧屏,通过大屏观看视频。同时,视频和音频效果可以分离到外围音频;设备B的数据可以通过设备A获取;多设备终端的数据同步等。在HarmonyOS分布式系统中,一切都是能力,能力没有大小。在HarmonyOS应用中,页面是一种能力,比如登录页面,有登录功能;服务是一种能力,例如在后台播放音乐的能力;数据操作是一种能力,比如获取数据库数据等。同时能力之间也可以相互调用,通过页面能力管理背景音的播放和暂停。在面向对象编程中一切都是对象,在HarmonyOS中一切都是能力。能力类别鸿蒙应用可以包含一个或多个能力。鸿蒙应用可以以能力为单位进行部署。在鸿蒙应用中,能力分为两种:FA(FeatureAbility,元程序)和PA(ParticleAbility,元服务)。为两种类型提供了不同的模板,可直接用于日常业务开发。FA支持PageAbilityFA代表的是拥有UI界面的能力,旨在与用户进行交互。说白了就是给用户提供可操作的页面。官方根据不同的业务类型提供了不同类型的模板,例如关于页面、列表页面、个人中心页面等。可以根据不同的使用场景选择不同的模板。可以在现有模板的基础上进行修改,实现功能的快速实现。同时,也可以调用PA支持的能力实现复杂的业务逻辑,比如通过新闻内容页面的ServiceAbility自动在后台播放音乐。PA支持ServiceAbility和DataAbilityPA代表无UI界面的能力,用于支持FA。例如,提供数据访问能力作为数据存储。ServiceAbility提供后台运行任务的能力;DataAbility提供插入、删除、更新、查询和打开文件的能力。能力生命周期有四种生命周期状态:INITIAL(初始状态)、INACTIVE(未激活)、ACTIVE(激活)、BACKGROUND(背景)。INITIAL:初始状态。将即将启动的功能加载到内存中,但不运行它。INACTIVE:非活动状态。前后台之间的状态,UI可见但不可操作。ACTIVE:活动状态。当前放在前台的页面已完全呈现并可以与之交互。背景:隐形状态。也叫后台放置,比如A页面跳转到B页面,那么B页面会被渲染,A页面会被隐藏。如果内存不足,处于这种状态的页面将被销毁。整个完整的生命周期图如下(来自官方):注(翻译错误):图中,能力因内存不足而终止或能力在用户跳转到能力并改变后被系统销毁系统内存不足。导航到功能。所有的页面能力都必须从重写onStart()方法开始,该能力的所有生命周期回调方法如下:@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setMainRoute(HomeAbilitySlice.class.getName());}@OverrideprotectedvoidonActive(){super.onActive();}@OverrideprotectedvoidonInactive(){super.onInactive();}@OverrideprotectedvoidonBackground(){super.onBackground();}@OverrideprotectedvoidonForeground(Intentintent){super.onForeground(intent);}@OverrideprotectedvoidonStop(){super.onStop();}这里我们专门写了一个页面间跳转观察capability的生命周期,使用HiLog日志查看。运行应用程序并点击跳转然后再次返回,日志控制台输出如下所示。Ability_Lifecycle:MainAbilityonInitialized()方法...Ability_Lifecycle:MainAbilityonStart()方法...Ability_Lifecycle:MainAbilityonActive()方法...Ability_Lifecycle:MainAbilityonInitialized()方法...Ability_Lifecycle:HomeAbilityonInitialized()方法...Ability_Lifecycle:StartHomeAbilityon方法。..Ability_Lifecycle:HomeAbilityonActive()方法...Ability_Lifecycle:MainAbilityonBackground()方法...Ability_Lifecycle:HomeAbilityonInactive()方法...Ability_Lifecycle:MainAbilityonForeground()方法...Ability_Lifecycle:MainAbilityonActive()方法...Ability_Lifecycle:HomeAbilityonBackground()method...Ability_Lifecycle:HomeAbilityonStop()method...从日志中我们观察到MainAbility是先启动的。跳转到HomeAbility时,HomeAbility被激活,MainAbility进入不可见状态(即后台)。当点击后退按钮后,MainAbility回到前台并激活,而HomeAbility变为不可见并销毁。能力间跳转能力间跳转以意图(Intent)为载体,承载对象间需要传递的信息。通过封装intent相关的参数(Parameters)和操作(Operation),可以启动或跳转到另一个能力。Buttonbutton=(Button)findComponentById(ResourceTable.Id_btn);button.setClickedListener(l->{Operationoperation=newIntent.OperationBuilder().withDeviceId("").withBundleName("com.itming.walking.photokit").withAbilityName("com.itming.walking.photokit.HomeAbility").build();intent.setOperation(operation);startAbility(intent);});本节主要讲解什么是Ability,它的分类、生命周期以及如何使用,Ability中的方法后续会详细讲解,敬请期待……注:文中如有误解,欢迎一起讨论!更多信息请访问:与华为官方共建的鸿蒙科技社区https://harmonyos.51cto.com