鸿蒙应用程序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!@ ...
随机推荐
- Selenium+Python之下拉菜单的定位
1.通过selenium.webdriver.support.ui的Select进行定位 下拉菜单如下图: 定位代码(选择Male): from selenium.webdriver.support. ...
- Selenium刚玩一会儿,就感受了私人秘书的体验
学习python的过程中,少不了接触第三方库,毕竟作为胶水语言python的强大之处也就是第三方库体量庞大,无疑大大增强了python的战斗力. 有时候想完成网页自动化操作,这时候Selenium进入 ...
- 国产网络损伤仪SandStorm -- 只需要上下拖拽能调整链路规则顺序
国产网络损伤仪SandStorm(弱网络测试)可以模拟出带宽限制.时延.时延抖动.丢包.乱序.重复报文.误码.拥塞等网络状况,在实验室条件下准确可靠地测试出网络应用在真实网络环境中的性能,以帮助应用程 ...
- kubernetes实战-配置中心(三)配置服务使用apollo配置中心
使用配置中心,需要开发对代码进行调整,将一些配置,通过变量的形式配置到apollo中,服务通过配置中心来获取具体的配置 在配置中心修改新增如下配置: 项目信息: 配置: 重新打包镜像,使用apollo ...
- 加密后的程序在Win8中无法运行
需要使用dotNET_Reactor 4.7以上的版本加密后才能在Win8中使用.
- Hexo、主题、部署上线
Hexo.主题.部署上线 安装Hexo git和nodejs安装好后,就可以安装hexo了,你可以先创建一个文件夹MyBlog,用来存放自己的博客文件,然后cd到这个文件夹下(或者在这个文件夹下直接右 ...
- appveyor build failed --
在 https://www.cnblogs.com/lqerio/p/11117498.html 使用了appveyor 进行 hexo 博客的版本控制持续集成. 今天push 到 github的 r ...
- 按层次顺序创建二叉树;判断BST
https://github.com/TouwaErioH/subjects/tree/master/C%2B%2B/PA2 BST 假设已经给定树节点的结构不可修改. 然后输入是按照层次顺序 怎样创 ...
- HDU 3966 Aragorn's Story(树链剖分)题解
题意:给一棵树,要求你对一个路径上的值进行加减,查询某个点的值 思路:重链剖分. 由于分了轻重儿子,我每次到重儿子的top只要O(1),经过的轻儿子最多logn条,那么我每次往上跳最多跳logn次. ...
- 如何使用 js 实现tooltips 的 hover 时候坐标的自动计算
如何使用 js 实现tooltips 的 hover 时候坐标的自动计算 js 监听 mouseover event https://developer.mozilla.org/zh-CN/docs/ ...