鸿蒙开发(一)Stage模型应用开发准备及简介

305 阅读3分钟

DevEco Studio下载

开放版本

目前官网对外提供的开发版本是 DevEco Studio 3.1.1 Release

image.png 当然也可以体验一下 DevEco Studio 4.0

image.png

DevEco Studio语言版本支持

<=API7API8API9>=
Java、ArkT、JSArkTS、JSArkTS、JS

sdk下载

DevEco Studio 4.0 支持 API10

安装DevEco Studio, 找到SDK Manager点进去,会进入sdk下面页面,其中包括HarmonyOS以及OpenHarmony的sdk下载

image.png

创建Hello Word

做过Android开发的应该很熟悉,和创建Android项目差不多。

image.png

Stage模型应用组件简介

基本概念

官方提出了两种模型:

  • FA(Feature Ability)模型:HarmonyOS早期版本开始支持的模型,已经不再主推。
  • Stage模型:HarmonyOS 3.1 Developer Preview版本开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型

FA模型与Stage模型差异

官网对Stage模型应用的基本概念图

image.png

UIAbility

UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。它系统调度的基本单元,为应用提供绘制界面的窗口;一个UIAbility组件中可以通过多个页面来实现一个功能模块。每一个UIAbility组件实例,都对应于一个最近任务列表中的任务。 (〃 ̄︶ ̄)和Android的Activity很像。

声明配置
{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "default",
      "tablet"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:icon",
        "label": "$string:EntryAbility_label",
        "startWindowIcon": "$media:startIcon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ]
      }
    ]
  }
}

当我们创建一个新的项目时,会生成一个主Module(一般是entry),我们首先看一下entry模块的配置文件module.json5

module节点:主要是对当前module的配置信息

  • type: 标识当前Module的类型。类型有四种,分别:
    • entry:应用的主模块。
    • feature:应用的动态特性模块。
    • har:静态共享包模块。
    • shared:动态共享包模块。
  • mainElement: 标识当前Module的入口UIAbility名称或者ExtensionAbility名称。
  • deviceTypes: 标识可以在那些设备上运行。
  • pages: 标识当前Module的profile资源,用于列举每个页面信息。
    • profile资源文件是在resources/base/profile
{
  "src": [
    "pages/Index",
    "pages/Main"
  ]
}
  • abilities节点:标识当前Module中UIAbility的配置信息,标签值为数组类型 (这个节点类似于AndroidMainfest中activity标签)
    • srcEntry: 该标签标识入口UIAbility的代码路径
    • launchType: 标识当前UIAbility组件的启动模式,可选标签值:
      • multiton:多实例模式,每次启动创建一个新的实例。
      • singleton:单实例模式,仅第一次启动创建新实例。
      • specified:指定实例模式,运行时由开发者决定是否创建新实例
    • skills: 标识当前UIAbility组件或ExtensionAbility组件能够接收的Want的特征集,类似于activity标签下的action,配置规则:
      • 对于Entry类型的HAP,应用可以配置多个具有入口能力的skills标签(即配置了ohos.want.action.home和entity.system.home)。
      • 对于Feature类型的HAP,只有应用可以配置具有入口能力的skills标签,服务不允许配置。

在module 和 abilities下还有很多其他配置。module.json5配置文件

生命周期
graph TD
    subgraph Create
    end
    subgraph Foreground
    end
    subgraph Background
    end
    subgraph Destroy
    end
   Create --> Foreground
   Foreground --> Background
   Background --> Foreground
   Background --> Destroy
  • Create状态:当UIAbility被创建时会触发这个生命周期,回调Create方法。
  • Foreground和Background状态:顾名思义就是UIAbility切换前后台的一种状态。
  • Destroy状态:UIAbility销毁状态。例如调用terminateSelf()方法停止当前UIAbility实例。
  • 在Create和Foreground以及Background和Destroy还分别会有两个window状态:WindowStageCreate和WindowStageDestroy
  • WindowStageCreate是在UIAibility创建完成,Foreground调用之前触发的,主要用来UI加载。这里可以通过windstate的loadContent方法加载我们的pages image.png
  • WindowStageDestroy是UIAibility销毁之前触发的方法。主要用于销毁UI。

WindowStageCreate和WindowStageDestroy状态图

image.png