OpenHarmony的架构第三层:框架层。框架层是承上启下的一层,它为应用开发提供了统一的、高效的开发框架和工具。下面详细讲解框架层的组成和核心知识。

框架层概述

框架层位于系统服务层之上,应用层之下。它的主要目的是让应用开发者能够更轻松、更高效地开发应用程序,而无需关心底层系统服务的复杂细节。框架层提供了多种开发语言的支持,并封装了丰富的UI组件、能力接口和开发范式。

框架层主要包括以下几个关键部分:

  1. Ability框架:提供应用开发的基本能力单元。

  2. UI框架:提供声明式UI开发范式和各种UI组件。

  3. 多语言运行时:支持ArkTS、JS和C/C++等多种开发语言。

  4. 其他框架能力:如事件通知、资源管理等。

下面我们逐一详细讲解。


1. Ability框架

在OpenHarmony中,Ability是应用的基本组成单元,是系统调度应用的最小单元。一个应用可以由一个或多个Ability组成。Ability分为两种类型:

  • Page Ability:具有用户界面,用于与用户进行交互。

  • Service Ability:没有用户界面,用于在后台运行任务。

此外,还有一种Data Ability,用于跨应用共享数据。

核心概念:
  • 生命周期:Ability框架管理着Ability的完整生命周期,包括创建、显示、隐藏、销毁等状态。开发者需要了解并正确处理生命周期的回调。

  • 调度与迁移:在分布式环境下,Ability可以在不同设备间迁移和调度。例如,一个Ability在设备A上启动,可以迁移到设备B上继续运行。

学习要点:
  • 学会如何创建Page Ability和Service Ability。

  • 理解Ability的生命周期回调方法,并知道在何时调用。

  • 了解如何实现Ability的跨设备迁移。


2. UI框架

OpenHarmony的UI框架提供了两种开发范式:

  • 基于JS的类Web开发范式:使用hml、css和js文件来开发界面,类似于Web开发,适合传统前端开发者。

  • 声明式UI开发范式(ArkUI):这是OpenHarmony主推的开发方式,使用ArkTS语言,提供更简洁、更高效的UI开发体验。

声明式UI(ArkUI)核心特点:
  • 声明式描述:使用描述性的语法来声明UI组件,而不是命令式地操作UI组件树。

  • 组件化:提供了丰富的内置组件(如按钮、文本、输入框等)和容器组件(如栅格、列表、滑动器等),并且支持自定义组件。

  • 状态管理:当状态发生变化时,UI会自动更新。开发者只需关心数据,UI会根据数据状态自动渲染。

  • 布局与动画:提供了灵活的布局系统(如弹性布局、相对布局等)和丰富的动画效果。

学习要点:
  • 掌握声明式UI的语法,学会使用ArkTS来开发UI。

  • 熟悉常用的UI组件和容器组件的使用。

  • 理解状态管理机制,学会使用@State、@Prop等装饰器。

  • 学会使用动画和手势处理。


3. 多语言运行时

OpenHarmony支持多种编程语言,使得开发者可以选择自己熟悉的语言进行开发。

  • ArkTS运行时:ArkTS是OpenHarmony首推的应用开发语言,它是TypeScript的超集,在TypeScript的基础上增加了声明式UI和状态管理等功能。ArkTS运行时负责执行ArkTS代码。

  • JS运行时:支持使用JavaScript进行应用开发,使用QuickJS作为JS引擎。

  • C/C++运行时:对于高性能要求或底层操作,可以使用C/C++开发。OpenHarmony提供了NAPI(Native API)框架,使得JS/ArkTS代码可以调用C/C++编写的原生模块。

学习要点:
  • 重点学习ArkTS语言,因为这是OpenHarmony应用开发的主流和未来。

  • 了解如何使用NAPI进行C/C++与ArkTS/JS的交互。


4. 其他框架能力

框架层还提供了许多其他重要能力,包括但不限于:

  • 事件通知:提供了应用内和应用间的事件通信机制。

  • 资源管理:统一管理字符串、图片、布局文件等资源,并支持多设备适配(如不同屏幕密度、语言等)。

  • 窗口管理:管理应用窗口的创建、销毁、大小调整等。

  • 权限管理:提供权限申请和检查的API。


总结与学习建议

框架层知识总结

  • Ability框架是应用开发的基础,理解Ability的生命周期和分布式调度是关键。

  • UI框架是应用开发的核心,尤其是声明式UI范式,需要重点掌握。

  • 多语言运行时让开发更灵活,但ArkTS是主推语言,应作为学习重点。

  • 其他框架能力为应用开发提供了便利,需要在实际开发中逐步掌握。

如何深入学习

  1. 官方文档:阅读OpenHarmony官方文档中关于应用开发的部分。

  2. 动手实践

    • 使用DevEco Studio创建多个Ability的应用,体验Ability的生命周期。

    • 使用ArkUI声明式开发范式编写UI界面,尝试使用各种组件和布局。

    • 学习状态管理,实现一个简单的数据绑定和界面更新。

    • 尝试使用C/C++编写一个简单的原生模块,并通过NAPI在ArkTS中调用。

  3. 参考示例:OpenHarmony提供了大量的示例代码(Sample),通过阅读和运行这些示例,可以快速掌握框架层的使用方法。

框架层是应用开发者最直接接触的部分,熟练掌握框架层是成为一名合格的OpenHarmony应用开发者的关键。祝你学习顺利!

好的,我们继续深入OpenHarmony架构的第三层——框架层。这一层是应用开发者最直接打交道的部分,它提供了构建应用程序所需的一切工具、接口和运行环境。

框架层概览

框架层位于系统服务层之上,应用层之下。它的核心作用是为应用开发者提供一套标准、高效、易用的开发范式和编程接口,让开发者能够专注于业务逻辑,而无需关心复杂的底层系统服务细节。

如果说系统服务层提供了各种"原材料"(系统能力),那么框架层就是将这些原材料组合成标准"预制件"和"施工蓝图"(API和框架),让开发者能快速、规范地"盖房子"(开发应用)。

框架层主要由三大核心部分组成,其架构与关系如下图所示:


1. Ability框架:应用的基本组成单元

在OpenHarmony中,Ability是应用的基本组成单元,是系统调度应用的最小单元。你可以将一个Ability理解为一个独立的功能模块或页面。

Ability的三种类型:
  • Page Ability(页面Ability)

    • 功能:提供与用户交互的界面。一个Page Ability对应一个UI页面。

    • 生命周期:框架层管理着其完整的生命周期,包括onCreate(创建)、onForeground(进入前台)、onBackground(进入后台)、onDestroy(销毁)等状态。开发者需要在对应的回调函数中编写逻辑。

    • 示例:一个新闻应用的主列表页、详情页都是一个独立的Page Ability。

  • Service Ability(服务Ability)

    • 功能:在后台运行,没有用户界面。用于执行长时间运行的任务(如音乐播放、文件下载、数据同步)。

    • 特点:它可以在不打开应用界面的情况下被其他Ability启动或连接。

    • 示例:一个音乐播放器的播放核心就是一个Service Ability,即使你关闭了播放界面,音乐仍能继续播放。

  • Data Ability(数据Ability)

    • 功能:用于应用间的数据共享。它对外提供统一的数据访问接口(如增、删、改、查),其他应用在获得授权后可以通过这些接口来操作此应用的数据。

    • 示例:一个联系人应用可以提供一个Data Ability,允许短信应用在发送短信时查询联系人信息。

Ability框架的核心价值:
  • 组件化开发:促使开发者将应用拆分为高内聚、低耦合的功能模块。

  • 统一的生命周期管理:系统可以更高效地调度和管理应用资源,尤其在内存紧张时,能正确地销毁后台Ability以释放资源。

  • 跨设备流转基石:分布式调度服务(DMS)调度和迁移的基本单位就是Ability。当你将视频从手机流转到电视时,实际是在电视上启动了一个新的Page Ability来接管播放任务。


2. UI框架:ArkUI

ArkUI是OpenHarmony推出的新一代声明式UI开发框架,是构建应用界面的核心。它提供了两种开发范式,但官方主推声明式范式。

a) 声明式UI开发范式(主推)

这是OpenHarmony UI开发的现在和未来,其核心理念是 "描述UI应该是什么样子",而不是命令式地一步步"如何构建UI"。

  • 核心特点

    • 简洁自然:使用接近自然语言的语法来描述UI。

    • 数据驱动:UI随数据状态自动更新。当应用中的数据发生变化时,框架会自动更新与之绑定的UI部分。

    • 状态管理:提供了一系列装饰器(如@State@Prop@Link)来管理组件状态,当状态变化时,组件会自动重新渲染。

  • 代码示例(ArkTS)

    typescript

    // 一个简单的计数器组件
    @Entry
    @Component
    struct MyComponent {
      @State count: number = 0 // 使用@State装饰器声明一个响应式数据
    
      build() {
        // 描述UI结构
        Column() {
          Text(`Count: ${this.count}`) // 文本内容绑定count
            .fontSize(30)
          Button('Click Me')
            .onClick(() => {
              this.count++ // 点击按钮,count发生变化,Text组件会自动更新
            })
        }
        .width('100%')
        .height('100%')
      }
    }
    • 可以看到,开发者只需要声明count数据和使用build方法描述UI,当count变化时,Text组件会自动更新。开发者无需手动调用类似setText()的方法。

b) 兼容的JS UI范式(类Web开发)

这是一种兼容传统的类Web开发方式,使用HTML、CSS和JavaScript来构建UI,更适合有Web开发背景的团队快速上手。但功能性和性能不如声明式范式,未来会逐步淡出。


3. 多语言运行时

框架层提供了对多种开发语言的支持,让开发者可以根据场景和偏好选择最合适的语言。

  • ArkTS(首选与未来)

    • 是什么:ArkTS是OpenHarmony首推的应用开发语言。它是TypeScript的超集,在继承TS所有特性的基础上,扩展了声明式UI和状态管理等功能。

    • 优势

      • 类型安全:静态类型检查,能在开发阶段发现更多错误。

      • 性能更优:相比JS,运行效率更高。

      • 开发体验好:完美契合ArkUI声明式范式。

  • JavaScript(兼容与过渡)

    • 支持情况:主要用于兼容旧的JS UI范式开发。

    • 运行时:使用轻量级的QuickJS引擎作为JS运行时。

  • C/C++(高性能与底层)

    • 使用场景:用于开发对性能要求极高的模块,如游戏引擎、高性能算法、图形处理等。

    • 交互方式:通过NAPI框架,使得C/C++代码可以被ArkTS/JS代码方便地调用,实现了高级语言与底层原生代码的互通。

总结与学习建议

框架层知识总结

  • 角色定位:框架层是应用开发的"工具箱"和"脚手架",定义了OpenHarmony应用的开发模式。

  • 三大支柱

    1. Ability框架:定义了应用的组织结构。

    2. ArkUI框架:定义了UI的构建方式(声明式UI是核心)。

    3. 多语言运行时:提供了开发工具(ArkTS是首选)。

如何深入学习

  1. 第一步:掌握语言基础

    • 系统学习 ArkTS 语言,特别是其相对于TypeScript的扩展部分(如装饰器)。

  2. 第二步:理解Ability生命周期

    • 在DevEco Studio中创建不同类型的Ability,通过日志理解其生命周期的变化。

  3. 第三步:精通声明式UI开发

    • 这是学习的重中之重。反复练习,理解其"数据驱动"的思想。

    • 掌握各种内置组件(ButtonTextImage等)和布局组件(ColumnRowStack等)的使用。

    • 深入理解状态管理装饰器(@State@Prop@Link@Provide@Consume等)的区别和使用场景。

  4. 第四步:动手实践

    • 从简单的UI页面开始,逐步完成一个完整的应用,如"待办事项"或"天气应用"。

    • 在过程中,学习如何使用框架层提供的其他能力,如路由导航、网络请求、数据存储等。

框架层是通往OpenHarmony应用开发的大门,而ArkTS + 声明式UI是打开这扇门的金钥匙。祝你学习顺利!

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐