【鸿蒙学习】深入了解UIAbility组件

文章目录

在鸿蒙操作系统(HarmonyOS)的开发过程中,UIAbility组件是构建应用界面的关键。本文将带您了解UIAbility组件的概述、生命周期、启动模式以及基本用法,并通过代码示例帮助您更好地掌握这一组件。

组件概述

UIAbility是HarmonyOS应用开发中的一个重要组件,用于处理用户界面交互。它类似于Android中的Activity和iOS中的ViewController。UIAbility提供了丰富的UI控件,开发者可以通过这些控件构建出美观、易用的应用界面。

UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。例如,在支付应用中,可以将入口功能和收付款功能分别配置为独立的UIAbility。

每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。

UIAbility组件具有以下特点:

  • 提供页面导航、布局、事件处理等功能。
  • 支持多种布局方式,如DirectionalLayout、DependentLayout等。
  • 支持自定义UI控件。
    声明配置
    为使应用能够正常使用UIAbility,需要在module.json5配置文件的abilities标签中声明UIAbility的名称、入口、标签等相关信息。
java 复制代码
{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone",
      "tablet"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:icon_bak",
        "label": "$string:EntryAbility_label",
        "startWindowIcon": "$media:icon_bak",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ]
      }
    ]
  }
}

生命周期

官网地址:生命周期状态说明

UIAbility组件的生命周期包括以下几个状态:

  1. ** 初始化(UIAbility Start)**:在Ability被创建时调用,用于初始化Ability。
  2. ** 启动(create)**:在Ability可见时调用。
  3. 前台运行(Foreground):在Ability进入前台时调用。
  4. 后台运行(Background):在Ability进入后台时调用。
  5. 销毁(onDestroy) :在Ability被销毁时调用。
    以下是一个简单的生命周期示例:
java 复制代码
public class MyAbility extends Ability {
    @Override
    public void onInitialize() {
        super.onInitialize();
        // 初始化操作
    }
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        // 启动操作
    }
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
        // 前台运行操作
    }
    @Override
    public void onBackground() {
        super.onBackground();
        // 后台运行操作
    }
    @Override
    public void onStop() {
        super.onStop();
        // 停止操作
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        // 销毁操作
    }
}

启动模式

UIAbility支持以下启动模式:

  1. 标准模式(Standard):每次启动都会创建一个新的实例。
  2. 单例模式(Singleton):整个应用生命周期内只创建一个实例。
  3. 栈顶复用模式(SingleInstance) :如果栈顶存在实例,则复用该实例,否则创建新实例。
    在config.json中配置启动模式:
json 复制代码
{
  "module": {
    "abilities": [
      {
        "name": ".MyAbility",
        "launchType": "standard"
      }
    ]
  }
}

基本用法

以下是一个简单的UIAbility组件用法示例,创建一个包含文本和按钮的页面:

java 复制代码
public class MyAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_my);
        // 查找组件
        Text text = (Text) findComponentById(ResourceTable.Id_text);
        Button button = (Button) findComponentById(ResourceTable.Id_button);
        // 设置文本
        text.setText("Hello HarmonyOS!");
        // 设置按钮点击事件
        button.setClickedListener(component -> {
            text.setText("Button clicked!");
        });
    }
}

对应的布局文件(ability_my.xml):

xml 复制代码
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:orientation="vertical">
    <Text
        ohos:id="$+id:text"
        ohos:height="match_content"
        ohos:width="match_parent"
        ohos:text="Hello HarmonyOS!"
        ohos:text_size="20fp"
        ohos:padding="20vp"/>
    <Button
        ohos:id="$+id:button"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:text="Click Me"
        ohos:text_size="20fp"
        ohos:padding="20vp"/>
</DirectionalLayout>

通过以上示例,您已经了解了如何在HarmonyOS应用中使用UIAbility组件构建界面。掌握UIAbility组件是开发HarmonyOS应用的关键,希望本文能帮助您更好地入门鸿蒙开发。

相关推荐
武子康7 分钟前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
使者大牙17 分钟前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型
As977_39 分钟前
前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)
前端·css·学习
ajsbxi42 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
Rattenking43 分钟前
React 源码学习01 ---- React.Children.map 的实现与应用
javascript·学习·react.js
SameX1 小时前
鸿蒙 Next 电商应用安全支付与密码保护实践
前端·harmonyos
dsywws1 小时前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
道法自然04021 小时前
Ethernet 系列(8)-- 基础学习::ARP
网络·学习·智能路由器
爱吃生蚝的于勒1 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
SuperHeroWu72 小时前
【HarmonyOS】键盘遮挡输入框UI布局处理
华为·harmonyos·压缩·keyboard·键盘遮挡·抬起