鸿蒙入门手册(二):应用是怎样运行的

本文将讨论如下问题

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

鸿蒙应用工程目录

  • .grade:构建工程需要的文件,我们不关心
  • .idea:DevEco Studio需要的文件,我们不关心
  • build:将来编译的 .app 文件和 hap 文件存放在这里
  • entry:代码和布局文件都在这里,我们最关心的部分
  • gradle:构建工程需要的文件,我们不关心

entry文件夹

  • com.example.myapplication:存放Ability文件
  • slice:存放slice文件
  • resources:存放布局文件、图片、音乐等多媒体资源
  • config.json:配置文件
    在这里插入图片描述
2-1 entry目录结构

Ability 与 slice

(官方文档:Ability 与 Slice)

Ability

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

  • 在初次使用 QQ 时,软件会弹出 “ 注册 ” 界面,这表明 QQ 具有 注册能力(Ability)

在这里插入图片描述

2-2 注册 Ability

  • 我们可以下载/上传 QQ 群中的文件,这表明 QQ 具有存取数据的能力(Ability)

在这里插入图片描述

2-3 存取数据 Ability

Slice

  通过上面的例子我们不难看出,不管多么复杂的应用,都是由各种 Ability 组合而成的。那什么是 Slice 呢? Ability 与 Slice 的关系又是什么?
  Slice的中文含义为 “ 切片 ”,上面我们说到,QQ 具有 “ 注册 ” 能力,在整个注册过程中,我们将在各个界面之间跳转(填手机号码、身份验证、填写验证码、设置密码…),我们就把这里的每一个界面称之为 Slice。不难看出,Ability 与 Slice 的关系为:一个 Ability 是由若干个 Slice 组成的

Ability 的分类

  在鸿蒙系统中,Ability分为两大类:
  Feature Ability:具有与用户交互的能力,至少有一个 Slice
  Atomic Ability:分为 Service 和 Data 两类,不具有与用户交互的能力,也就没有 Slice

怎样建立 Ability 与 Slice
  1. 鼠标左键选中com.example.myapplication

在这里插入图片描述

2-4 选中包名文件夹

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

在这里插入图片描述

2-5 创建 Ability

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

在这里插入图片描述

2-6 配置 Ability

  1. 注册 Ability,鸿蒙系统要求所有的 Ability 文件都要在 Config.json 中注册

    1. 打开 Config.json 文件
      在这里插入图片描述
    2-7 打开 Config.json 文件

    1. 找到 abilities 部分
    "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"
      }
    ]
    
    1. 修改 “actions” 内的内容,可以任取,只要不与其它 Ability 的重复即可
    "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. 我们发现,在 Slice 文件夹下多了一个 Slice 文件

在这里插入图片描述

2-8 自动生成 Slice 文件

  1. 此后,每当我们创建一个 Empty Page Ability, 系统都会在 Slice 文件夹下为我们创建一个对应的 Slice文件,我们所有的代码都将放在 Ability 文件和 Slice 文件中。

鸿蒙应用运行逻辑

  经过这么久的铺垫,现在我们来看一看鸿蒙应用究竟是怎样运行的。
  我们说过,鸿蒙应用是由若干 Ability 组成的,那应用也应该从某一个 Ability 开始运行,这个 Ability 我们称之为 MainAbility(注意,MainAbility 是由 Config.json 文件指定的,不一定是名为 MainAbility 的文件)。因为我们没有更改过 Config.json 中的MainAbility 配置,所以系统默认从 MainAbility 开始运行:

在这里插入图片描述

2-9 MainAbility

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

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

在这里插入图片描述

2-10 进入指定的 Slice 文件

  1. 系统调用 MainAbilitySlice 的 onStart() 方法,并通过 setUIContent() 指定 xml文件

在这里插入图片描述

2-11 指定 xml 文件

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

在这里插入图片描述

在这里插入图片描述

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

  1. 下期我们将讨论应用如何与用户进行交互
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值