在进一步实践之前,需要先弄明白一个概念:Ability。

不知道你有没有注意到,使用鸿蒙开发工具DevEco Studio创建项目时,我们选择创建的是一个个Ability。

这是为什么呢?

1. 鸿蒙OS的定位

这需要从鸿蒙OS的自我定位说起:鸿蒙OS是一个分布式操作系统

“单机”操作系统

在我们目前常用的操作系统中,不管是手机还是电脑,App(Application,应用程序),是非常常见的一个概念,是我们解决问题的基本对象。

  • 要跟朋友聊天,打开聊天App。

  • 要听歌,打开音乐App。

  • 要看视频,可以打开各种视频App。

  • 要写文档,打开Word或者PPT。

与鸿蒙操作系统不同,这些“单机”操作系统通常是

  • 1). 运行在同一类设备上,对于不同类型的设备,通常运行不同的操作系统。
  • 2). 设备与设备之间除了是物理上是分隔开的,在操作系统层面上也是分隔开的。
  • 3). 设备之间的连接,通常是由需要连接的应用来主动发起,然后经过操作系统通过网络进行连接。
  • 4). App应用,是操作系统管理的基本单元。

分布式操作系统

而鸿蒙OS所谓的分布式是怎么样的呢?他是

  • 1). 在不同的设备运行着相同的鸿蒙OS。
  • 2). 设备与设备之间虽然物理上是分隔开的,但是在操作系统层上是连接在一起的,而且是由操作系统自动连接。
  • 3). 应用之间不再需要显式发起网络连接,而是直接相互通信。
  • 4). 一个App(应用)由多个Ability(能力)组成,而这些Ability是操作系统管理的基本单元。

于是,在鸿蒙OS上,如果你想

  • 要跟朋友聊天,你可以在手机上聊天,在电视上聊天,在车里、甚至在手表上聊天

  • 要听歌,你可以用音箱听,用手表看字幕,点赞和收藏

  • 要看视频,可以在电视上看,在手机上发弹幕

  • 要写文档,可以在电脑上编辑,在手机上浏览和审批

更重要的是,这些操作都不需要通过互联网进行任何数据传输和消息同步,因为通过鸿蒙OS,你是

  • 同一时间
  • 在不同设备上
  • 使用同一个App。

当然,这些场景,并不是鸿蒙OS的专利,即使是在现在的环境现在的操作系统上,只要产品经理认为有需求,程序员们依然可以为你实现,只是实现起来会相对麻烦,比如各种远程通信,各种数据和状态的同步,还有各种联调和测试。

而鸿蒙OS,将很多麻烦的处理过程整合到操作系统中,借此希望让程序员们可以用更优雅更自然的方式来实现这些功能,避免过早的头秃。

2. Ability

而Ability,就是鸿蒙OS为程序员们提供的基础设施之一。

Ability 分类

鸿蒙OS将Ability分为两大类:

  1. 带显示功能的Ability,Feature Ability(FA 功能能力)
  2. 不带显示功能的Ability,Particle Ability(PA)

    PA 再细分为Service Ability(服务能力)和 Data Ability(数据能力)

Ability = MVC?

咋一看,这不就是MVC嘛?

  • View = Feature Ability 负责显示
  • Controller = Service Ability 负责业务逻辑
  • Model = Data Ability 负责数据管理

如果用我们熟知的概念去套鸿蒙OS的概念,MVC也许确实是最接近的一个。

但是,可以用MVC去理解,不要被MVC所套住。

学一个新事物,最好还是试着去按照它的设计思路去思考,而不是用旧有的思路去套它的设计,否则,难免会冒出:

  • 为什么安卓或者iOS有这个,而鸿蒙OS没有?

    或者,

  • 鸿蒙OS为什么要设计这么一个玩意儿?

    等等摸不着头脑的问题。

Ability是分布式调度的基本单元

Ability是鸿蒙OS作为操作系统进行任务调度的基本单元。

鸿蒙OS在操作系统层将不同设备连接到一起,变成一个超级虚拟设备,为了适应这样的需求:

  • Feature Ability,运行在前台,用于交互,需要适应不同的显示和输入方式。

  • Particle Ability,运行在后台,负责与交互无关的业务,这类业务可以运行在任何有足够算力和资源的设备上,对于重度业务,可以主动选择运行在算力富余的设备上,甚至将任务分配到多个设备上进行分布式计算。

  • 不同的Ability可以灵活组合,以适应不同的使用需求和运行场景。

  • Ability要足够轻量,这样,才能容易调度,甚至在被从一个设备调度到另一个设备上时也足够流畅。

这个设计的关键之一是,不同设备间稳定而快速的连接,有了这个可靠的基础,程序员才可以专注于Ability的开发,而不用关心设备的连接和数据的传输。

而这,正是鸿蒙OS承诺的分布式软总线提供的基础功能。

3. 分布式编程思想?

所以,在鸿蒙OS之上进行应用开发,可能需要一些分布式编程思想,而业务的开发,可能,首先要从怎样将一个传统的App分解为不同的Ability开始,举个例子,

比如,……

比如,……

比如,怎样开发一个分布式的Hello Harmony呢?

就这样,下一次,我们就来撸一个分布式的Hello Harmony吧。

作者:IT男阿斌

想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

【免费直播课-基于鸿蒙IoT套件的猜数字游戏开发实战分享】

跟阿斌一起学鸿蒙(2). Ability vs App?的更多相关文章

  1. 抢先学鸿蒙(HarmonyOS)2.0,你就是下一个大咖!

        1. 你不知道的鸿蒙(HarmonyOS)   2020年9月10日,华为开发者大会发布了鸿蒙(HarmonyOS)2.0.我在2020-9-11日也发布了全球首套鸿蒙2.0 App开发视频课 ...

  2. 牛腩学用MUI做手机APP

    斗鱼直播间直播学习撸码,最终目标是用MUI做一个手机APP(暂定android平台,攒钱买IPHONE 7SE!!!),直播内容含整个软件APP的制作过程(含后台接口的制作,放到自己买的阿里云服务器, ...

  3. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载一(PhoneGap中的API)

    之前本博连载过<构建跨平台APP:jQuery Mobile移动应用实战>一书.深受移动开发入门人员的喜爱. 从如今開始,连载它的孪生姐妹书phoneGap移动应用实战一书,希望以前是小白 ...

  4. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载四(使用程序载入事件)

    在了解了PhoneGap中都有哪些事件之后,本节将開始对这些事件的使用方法进行具体地介绍.本节要介绍的是程序载入事件,也就是deviceready.pause和resume这3个事件. [范例4-2 ...

  5. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载五(使用PhoneGap获取设备信息)

    除了能够将HTML页面打包成可以直接安装运行的APP外,PhoneGap的一个最大优势在于可以通过JavaScript调用设备来访问设备上的硬件信息,从而实现一些原本只有依靠原生SDK才能够达到的目的 ...

  6. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载三(通过实例来体验生命周期)

    4.1.2  通过实例来亲身体验Activity的生命周期 上一小节介绍了Activity生命周期中的各个过程,本小节将以一个简单的实例来使读者亲身体验到Activity生命周期中的各个事件. 在Ec ...

  7. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载二(生命周期)

    4.1 什么是生命周期 想要真正地理解PhoneGap应用开发的内涵,首先需要理解什么是生命周期.这在字面上其实非常容易理解,一个应用从开始运行被手机加载到应用被退出之间的过程就称之为一个生命周期.为 ...

  8. 鸿蒙 Android iOS 应用开发对比02

    个人理解,不抬杠 转载请注明原著:博客园老钟 https://www.cnblogs.com/littlecarry/ IOS 把界面抽象成 "控制" Controller:And ...

  9. Android程序员学WEB前端(1)-HTML(1)-标准结构常用标签-Sublime

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/76522043觉得博文有用,请点赞,请评论,请关注,谢谢!~ 8月份了,换工作有2个月了 ...

随机推荐

  1. Gym102012G Rikka with Intersections of Paths

    题意 \(T\) 组数据,每组数据给定一棵 \(n\) 个点的树和 \(m\) 条路径,求选出 \(k\) 条给定路径使得至少有两条交于一点的方案数,对 \(10^9+7\) 取模. \(\textt ...

  2. 网络爬虫第三次作业——多线程、scrapy框架

    作业①: 1)单/多线程爬取网站图片实验   要求:指定一个网站,爬取这个网站中的所有的所有图片,例如中国气象网http://www.weather.com.cn.分别使用单线程和多线程的方式爬取. ...

  3. 深入探究ASP.NET Core Startup初始化

    前言 Startup类相信大家都比较熟悉,在我们使用ASP.NET Core开发过程中经常用到的类,我们通常使用它进行IOC服务注册,配置中间件信息等.虽然它不是必须的,但是将这些操作统一在Start ...

  4. 从原生web组件到框架组件源码(三)

    快乐的时光都是这么短暂,转眼间,web原生组件的知识点已经学完了,这个虽然暂时不一定有用,但是随着时间的积累,一步一个脚印的积累,你会有相应的收获,希望能变得更强,比如两年前我也会想有现成的东西不用, ...

  5. PASS模型-第一周个人报告

    PASS模型-第一周个人报告 博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE2020 作业要求 https://edu.cnblogs.com/campus ...

  6. 超实用的14个 Spring MVC “隐藏”技巧,用了都说好!

    通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求.然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet ...

  7. linux 的mysql 主从备份

    1.原理 mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到slave; 3) slave有一个I/O线程把mast ...

  8. IT人必知,互联网主流商业模式

    最近关注互联网电商营销相关方面的知识,对商业化和流量变现有了一些认知. 熟悉的朋友知道,写文章是我学习的一种方式,输出倒逼输入,继而强化知识体系,所以也把这段时间的输入,自顶向下做一个系列的分享. 对 ...

  9. sublime中插件

    AllAutocomplete Emmet

  10. 案例:简易的Div拖拽

    案例:简易的Div拖拽 鼠标移入Div区域后,按下鼠标左键,可以拖动Div移动;松开鼠标左键,Div拖动停止.同时要求Div不能拖出屏幕显示区域外. 拖拽原理:距离不变.三个事件(onmousedow ...