鸿蒙应用程序Ability(能力)看这一篇就够
本节概述
什么是Ability
Ability分类
Ability生命周期
Ability之间跳转
什么是Ability
Ability意为能力,是HarmonyOS应用程序提供的抽象功能。在Android应用程序中,Activity是整个应用程序的核心,其意为活动。无论是活动还是能力都是一种表述形式,虽然直译后理解起来比较抽象,但如果我们把它们理解为功能,这样就比较方便了。
就目前单一设备而言,我们可以使用手机打电话,发短信,玩游戏等,这些就是手机具有能力。在生活中,能力的体现无处不在,比如电饭煲具有蒸煮煲汤的能力;电视具有播放视频的能力;音响具有外放音乐的能力。
但HarmonyOS分布式系统所要实现的不仅仅是单一的能力,它所要达到的效果是能力可以单独存在,可以互相关联,可以彼此调用互相迁移。比如可以将手机端播放的视频迁移到智慧屏,通过大屏来观看视频,同时也可以将视频音效分离到外设音响;通过设备A获取设备B的数据;多设备终端数据同步等。
在HarmonyOS分布式系统中,一切皆能力,能力无大小。在HarmonyOS应用程序中,一个页面即一种能力,如登录页面,即具有登录功能的能力;一个服务即一种能力,如后台播放音乐的能力;一个数据操作即一种能力,如获取数据库数据等。同时能力之间也可以互相调用,通过页面能力来管理后台音效播放与暂停。
面向对象编程中一切皆对象,在HarmonyOS中一切皆能力。
Ability分类
一个HarmonyOS应用程序可以包含一个或多个能力。HarmonyOS应用程序可以以能力为单位进行部署。在HarmonyOS应用程序中将能力分为FA(Feature Ability,即元程序)和PA(Particle Ability,即元服务)两种类型,针对两种类型提供了不同的模板可以在日常业务开发中直接使用。
FA支持Page Ability
FA代表有UI界面的能力,被设计用于与用户交互。直白点就是给用户提供可操作的页面,官方根据不同的业务类型提供了不同种类的模板,比如关于页面、列表页面、个人中心页面等,可以根据不同的使用场景来选择不同的模板,也可以在当前模板的基础上进行修改以达到功能的快速实现。同时也可以调用PA支持的能力,来实现复杂的业务逻辑,比如在新闻内容页面通过Service Ability实现后台自动播放音乐。
PA支持Service Ability 和Data Ability
PA代表没有UI界面的能力,用于支持FA。例如提供数据访问能力作为数据存储。Service Ability提供后台运行任务的能力;Data Ability提供插入、删除、更新、查询及打开文件的能力。
Ability生命周期
能力有四种生命周期状态:INITIAL(初始态)、INACTIVE(未激活)、ACTIVE(激活)、BACKGROUND(后台)。
INITIAL: 初始状态。将即将启动的能力加载到内存中,但不运行。
INACTIVE:未激活状态。前台和后台中间的状态,该状态下UI可见,但不可操作。
ACTIVE:激活状态。当前置于前台页面完整呈现,可交互状态。
BACKGROUND: 不可见状态。也称置于后台,比如A页面跳转到B页面,则B页面呈现,A页面隐藏。这种状态的页面在内存不足情况下会被销毁。
整个完整的生命周期图如下所示(来自官方):
鸿蒙应用程序Ability(能力)看这一篇就够注(翻译错误):图中由于内存不足或用户跳转到该能力之后能力被系统销毁改为系统内存不足等原因导致终止能力,用户重新导航到该能力。
所有页面能力都必须从重写onStart()方法开始,该能力的所有生命周期回调方法如下:
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(HomeAbilitySlice.class.getName());
}
@Override
protected void onActive() {
super.onActive();
}
@Override
protected void onInactive() {
super.onInactive();
}
@Override
protected void onBackground() {
super.onBackground();
}
@Override
protected void onForeground(Intent intent) {
super.onForeground(intent);
}
@Override
protected void onStop() {
super.onStop();
}
这里我们专门写一个页面间跳转来观察能力的生命周期,使用HiLog日志的形式来查看。运行应用程序并点击跳转,然后再返回,日志控制台输出如下所示。
Ability_Lifecycle: MainAbility onInitialized()方法...
Ability_Lifecycle: MainAbility onStart()方法...
Ability_Lifecycle: MainAbility onActive()方法...
Ability_Lifecycle: MainAbility onInactive()方法...
Ability_Lifecycle: HomeAbility onInitialized()方法...
Ability_Lifecycle: HomeAbility onStart()方法...
Ability_Lifecycle: HomeAbility onActive()方法...
Ability_Lifecycle: MainAbility onBackground()方法...
Ability_Lifecycle: HomeAbility onInactive()方法...
Ability_Lifecycle: MainAbility onForeground()方法...
Ability_Lifecycle: MainAbility onActive()方法...
Ability_Lifecycle: HomeAbility onBackground()方法...
Ability_Lifecycle: HomeAbility onStop()方法...
从日志我们观察到先启动MainAbility,当跳转到HomeAbility时,HomeAbility被激活,而MainAbility进入不可见(也就是后台),当点击返回按钮后,MainAbility回到前台并激活,而HomeAbility将不可见并销毁。
Ability之间跳转
Ability之间的跳转是以意图(Intent)为载体来承载需要对象之间传递的信息。通过封装意图相关的参数(Parameters)和操作(Operation),可以启动或跳转到另一个能力。
Button button = (Button) findComponentById(ResourceTable.Id_btn);
button.setClickedListener(l -> {
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.itming.walking.photokit")
.withAbilityName("com.itming.walking.photokit.HomeAbility")
.build();
intent.setOperation(operation);
startAbility(intent);
});
本节主要阐述了能力(Ability)是什么、分类、生命周期及如何使用,后续将对Ability中方法进行详解,敬请期待...
注:文中若有理解偏差,欢迎一起讨论!
作者:云昌白晓明
想了解更多内容,请访问51CTO和华为合作共建的鸿蒙社区:https://harmonyos.51cto.com/
本文作者文章合集地址
鸿蒙应用程序Ability(能力)看这一篇就够的更多相关文章
- 【转】成为Java顶尖程序员 ,看这11本书就够了
成为Java顶尖程序员 ,看这11本书就够了 转自:http://developer.51cto.com/art/201512/503095.htm 以下是我推荐给Java开发者们的一些值得一看的好书 ...
- Java中的多线程=你只要看这一篇就够了
如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...
- [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...
- 什么是 DevOps?看这一篇就够了!
本文作者:Daniel Hu 个人主页:https://www.danielhu.cn/ 目录 一.前因 二.记忆 三.他们说-- 3.1.Atlassian 回答"什么是 DevOps?& ...
- JVM内存模型你只要看这一篇就够了
JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...
- 【java编程】ServiceLoader使用看这一篇就够了
转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...
- 2019-5-25-win10-uwp-win2d-入门-看这一篇就够了
title author date CreateTime categories win10 uwp win2d 入门 看这一篇就够了 lindexi 2019-5-25 20:0:52 +0800 2 ...
- 关于 Docker 镜像的操作,看完这篇就够啦 !(下)
紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...
- windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看
windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看 1. 新建excel表格 A B C D E 姓 名 全名 登录名 密码 李 四 李四 李四 test123!@ ...
随机推荐
- Dapr微服务应用开发系列2:Hello World与SDK初接触
题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...
- 洛谷P1144-最短路计数-最短路变形
洛谷P1144-最短路计数 题目描述: 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 思路: \(Dijkstra ...
- Windows font-size: 10px; bug
Windows font-size: 10px; bug Windows 最小只能渲染 font-size: 12px; ???屏幕分辨率 macOS 正常渲染 10px PC 最小只能渲染 font ...
- React PureComponent All In One
React PureComponent All In One import React, { // useState, // useEffect, // Component, PureComponen ...
- Flutte 什么是Widget,RenderObjects和Elements
原文 Opacity API文档 有没有想过Flutter如何获取这些小部件并将其实际转换为屏幕上的像素? 您可能已经知道如何使用StatelessWidget和StatefulWidget.但是那些 ...
- PAA房产智慧社区:解决社区管理服务的痛点难点
社区,是社交与生活的舞台,更是家的延伸.社区之所有能够有所创新发展,得益于借助数字化和智能化.智能化给社区带来的便利体现在社区门禁可以人脸识别:AI的摄像头可以自动捕获异常的现象,便于社区管理员第一时 ...
- 「NGK每日快讯」11.20日NGK公链第17期官方快讯!
- MySQL切换版本踩坑记录(包括恢复数据方法)
踩坑起因:在创建数据库时, 字段:create_time datetime DEFAULT CURRENT_TIMESTAMP, 报异常--Error Code: 1067 - Invalid def ...
- django学习-11.开发一个简单的醉得意菜单和人均支付金额查询页面
1.前言 刚好最近跟技术部门的[产品人员+UI人员+测试人员],组成了一桌可以去公司楼下醉得意餐厅吃饭的小team. 所以为了实现这些主要点餐功能: 提高每天中午点餐效率,把点餐时间由20分钟优化为1 ...
- 在多线程编程中不要使用sleep()、usleep()函数
这两个函数是非线程安全的,可能会造成程序卡死. 对于c++程序,建议使用std::this_thread::sleep_for()和std::this_thread::yield()代替. 纯c程序可 ...