本文将讨论如下问题

  • 鸿蒙应用的工程目录
  • Ability 与 Slice
  • 鸿蒙应用的运行逻辑

鸿蒙应用工程目录

.grade.ideabuildentrygradle

entry文件夹

com.example.myapplicationsliceresourcesconfig.json
2-1 entry目录结构

Ability 与 slice

(官方文档:Ability 与 Slice)

Ability

  在正式介绍鸿蒙应用运行逻辑之前,我们需要了解 Ability 和 Slice 的相关概念。官方对 Ability 的解释为 “ Ability是应用所具备能力的抽象,,也是应用程序的重要组成部分 ”。下面我们以 QQ 为例来感受一下 Ability 和 Slice:

注册

在这里插入图片描述

2-2 注册 Ability

存取数据

在这里插入图片描述

2-3 存取数据 Ability

Slice
一个 Ability 是由若干个 Slice 组成的
Ability 的分类
Feature AbilityAtomic Ability
怎样建立 Ability 与 Slice
com.example.myapplication

在这里插入图片描述

2-4 选中包名文件夹

  1. 鼠标右键 -> New -> Ability,选择想要创建的 Ability 类型,我们选择Empty Page Ability

在这里插入图片描述

2-5 创建 Ability

  1. 在 Page Name 栏为你创建的 Ability 起个名字

在这里插入图片描述

2-6 配置 Ability

“abilities”: [
  {

"skills": [                        //begin
  {                                     
    "entities": [
      "entity.system.home"
    ],
    "actions": [
      "action.system.home"
    ]
  }
],                                //end
"orientation": "unspecified",
"name": "com.example.myapplication.MainAbility",
"icon": "$media:icon",
"description": "$string:mainability_description",
"label": "MyApplication",
"type": "page",
"launchType": "standard"

}, { //把上面 begin ~ end 的内容复制到这里

"orientation": "unspecified",
"name": "com.example.myapplication.MainAbility2",
"icon": "$media:icon",
"description": "$string:mainability2_description",
"label": "entry",
"type": "page",
"launchType": "standard"

} ]

“abilities”: [
  {

"skills": [                        
  {                                     
    "entities": [
      "entity.system.home"
    ],
    "actions": [
      "action.system.home"
    ]
  }
],                                
"orientation": "unspecified",
"name": "com.example.myapplication.MainAbility",
"icon": "$media:icon",
"description": "$string:mainability_description",
"label": "MyApplication",
"type": "page",
"launchType": "standard"

}, {

"skills": [                        
  {                                     
    "entities": [
      "entity.system.home"
    ],
    "actions": [
      "action.new"         //修改此处的 action
    ]
  }
],                                     
"orientation": "unspecified",
"name": "com.example.myapplication.MainAbility2",
"icon": "$media:icon",
"description": "$string:mainability2_description",
"label": "entry",
"type": "page",
"launchType": "standard"

} ]

在这里插入图片描述

2-8 自动生成 Slice 文件

Empty Page Ability

鸿蒙应用运行逻辑

MainAbility

在这里插入图片描述

2-9 MainAbility

  MainAbility “ 没有代码 ”,只有一个重写的函数 onStart(),这又是怎么回事呢?想理解这个问题,我们还需要了解一下 Ability 的生命周期。

鸿蒙应用运行流程
  1. 系统会自动调用 MainAbility 的 onStart() 方法,并通过 setMainRoute() 方法指定接下来启动的 Slice 文件(MainAbilitySlice)

在这里插入图片描述

2-10 进入指定的 Slice 文件

在这里插入图片描述

2-11 指定 xml 文件

  1. 系统读取 xml 文件,并转换成可视化界面

在这里插入图片描述

在这里插入图片描述

2-12 系统将 xml 文件转换为可视化界面

  1. 下期我们将讨论应用如何与用户进行交互