鸿蒙UIAbility组件进阶

【最新鸿蒙应用开发】——一篇搞懂什么是UIAbility UIAbility组件是一种包含UI的应用组件,UIAbility组件是系统调度的基本单元(最小单元),为应用提供绘制界面的窗口,。一个应用可以包含一个或多个UIAbility组件。UIAbility划分原则与建议:UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。例如,在支付应用中,可以将入口功能和收付款功能分别配置为独立的UIAbility。每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。 阅读详情

AbilityStage

基本概念

在了解AbilityStage之前,我们需要先了解和回顾几个概念,UIAbility、ExtensionAbility、HAP。

  • UIAbility:前边的文章中我们讲过,UIAbility是包含UI的应用组件,主要用于和用户交互。
  • ExtensionAbility:是一种面向特定场景的应用组件,如输入法、桌面卡片、闲时任务、数据备份等,每一个具体场景对应一种ExtensionAbilityType,只能只用系统已经定义的场景。所有的ExtensionAbility组件均不能被应用直接启动,而是由响应的系统管理服务拉起,以确保其生命周期受系统管控。
  • HAP:应用安装的基本单位,一个应用会包含一个或者多个.hap文件,.hap是由项目工程中的module编译而成的。

回顾了几个概念之后,我们来说今天的AbilityStage。

AbilityState是Module级别的容器组件,与HAP是一一对应的关系。

当HAP中的代码首次被加载到应用进程中时,也就是Module初始化的时候,系统首先会创建一个AbilityState实例,AbilityStage可以管理Module中的Ability组件和ExtensionAbility组件。

关系图如下:
在这里插入图片描述
一个应用,也就是application,可以包含一个或者多个HAP,每个HAP对应一个AbilityStage,每个AlibityStage可以管理一个或者多个UIAbility,每个UIAbility中包含一个WindowStage,用于管理Window,每个Window中,可以管理一个或者多个UI页面。

当我们需要打开某一个UIAbility时:

  1. 如果该UIAbility所在的HAP还没有加载到进程中,那么系统会将HAP加载到进程中,创建一个AbilityStage实例。创建成功后,执行AbilityStage的onCreate生命周期函数,可以在该方法中进行一些module级别的资源初始化。
  2. 创建UIAbility实例,创建成功后,回调UIAbility的onCreate生命周期函数,可以在该回调函数中初始化一些业务逻辑。
  3. 系统为该UIAbility实例创建一个WindowStage实例,创建完成后,会回调UIAbility的onWindowStageCreate生命周期回调函数,可以在该回调函数中获取主窗口信息,设置UI界面以及监听WindowStage的生命周期变化。

如下图所示:
在这里插入图片描述

在鸿蒙中,应用组件和UI之间的生命周期是松耦合的,在这种设计模式下,有几个好处

  • 业务逻辑与UI分离,我们可以在UIAbility中处理一些与UI无关的业务逻辑,如打开蓝牙,连接数据库等。而在WindowStage持有的窗口上去处理界面相关的业务逻辑。

  • 便于系统对应用组件进行裁剪。比如无屏设备,系统在创建时不会创建窗口模块,可以减少运行内存占用。

  • 在多设备上,应用组件可以使用同一套生命周期。

    单窗口模式:
    在这里插入图片描述
    这个流程会触发App1中WindowStage的hidden和inActive生命周期,触发UIAbility中的background生命周期;同时触发App2中WindowStage的shown和active生命周期,触发UIAbility中的foreground生命周期。

    多窗口模式:
    在这里插入图片描述
    这个流程只会触发App1中WindowStage的inActive生命周期函数,同时触发App2中WindowStage的active生命周期函数。而不会触发两个app中各自UIAbility中的生命周期函数。

生命周期

AbilityStage共有四个生命周期函数

  • onCreate:AbilityStage实例创建完成后回调的生命周期函数,可以在这里进行Module的初始化操作。
  • onAcceptWant:UIAbility指定实例模式启动时,会触发该回调,在该回调中,我们需要返回一个唯一的key值,系统用于判断指定的实例是否已经存在。
  • onConfigurationUpdated:系统全局配置发生改变时触发的回调函数,如系统语言,深浅色等。可以在该函数中接收到系统最新的配置信息。
  • onMemoryLevel:系统调整内存时触发的函数。

使用方式

  1. 在工程Module对应的ets目录下,右键选择“New > Directory”,新建一个目录并命名为myabilitystage。

  2. 在myabilitystage目录,右键选择“New > ArkTS File”,新建一个文件并命名为MyAbilityStage.ts。

  3. 打开MyAbilityStage.ts文件,导入AbilityStage的依赖包,自定义类继承AbilityStage并加上需要的生命周期回调,示例中增加了一个onCreate()生命周期回调。

    import { AbilityStage, Want } from '@kit.AbilityKit';
    
    export default class MyAbilityStage extends AbilityStage {
      onCreate(): void {
        // 应用的HAP在首次加载的时,为该Module初始化操作
      }
    
      onAcceptWant(want: Want): string {
        // 仅specified模式下触发
        return 'MyAbilityStage';
      }
    }
    
  4. 在module.json5配置文件中,通过配置 srcEntry 参数来指定模块对应的代码路径,以作为HAP加载的入口。

    {
      "module": {
        "name": "entry",
        "type": "entry",
        "srcEntry": "./ets/myabilitystage/MyAbilityStage.ts",
        // ...
      }
    }
    

UIAbility组件间交互

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,包括应用内的其他UIAbility、或者其他应用的UIAbility(例如启动三方支付UIAbility)。

启动应用内的UIAbility

假设应用中有两个UIAbility:EntryAbility和FuncAbility(可以在同一个Module中,也可以在不同的Module中),需要从EntryAbility的页面中启动FuncAbility。

  1. 在EntryAbility中,通过调用startAbility()方法启动UIAbility,want为UIAbility实例启动的入口参数,其中bundleName为待启动应用的Bundle名称,abilityName为待启动的Ability名称,moduleName在待启动的UIAbility属于不同的Module时添加,parameters为自定义信息参数。
    import { common, Want } from '@kit.AbilityKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    
    const TAG: string = '[Page_UIAbilityComponentsInteractive]';
    const DOMAIN_NUMBER: number = 0xFF00;
    
    @Entry
    @Component
    struct Page_UIAbilityComponentsInteractive {
      private context = getContext(this) as common.UIAbilityContext;
    
      build() {
        Column() {
          //...
          List({ initialIndex: 0 }) {
            ListItem() {
              Row() {
                //...
              }
              .onClick(() => {
                // context为Ability对象的成员,在非Ability对象内部调用需要
                // 将Context对象传递过去
                let wantInfo: Want = {
                  deviceId: '', // deviceId为空表示本设备
                  bundleName: 'com.samples.stagemodelabilitydevelop',
                  moduleName: 'entry', // moduleName非必选
                  abilityName: 'FuncAbilityA',
                  parameters: {
                    // 自定义信息
                    info: '来自EntryAbility Page_UIAbilityComponentsInteractive页面'
                  },
                };
                // context为调用方UIAbility的UIAbilityContext
                this.context.startAbility(wantInfo).then(() => {
                  hilog.info(DOMAIN_NUMBER, TAG, 'startAbility success.');
                }).catch((error: BusinessError) => {
                  hilog.error(DOMAIN_NUMBER, TAG, 'startAbility failed.');
                });
              })
            }
            //...
          }
          //...
        }
        //...
      }
    }
    
  2. 在FuncAbility的onCreate()或者onNewWant()生命周期回调文件中接收EntryAbility传递过来的参数。
    import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
    
    export default class FuncAbilityA extends UIAbility {
      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        // 接收调用方UIAbility传过来的参数
        let funcAbilityWant = want;
        let info = funcAbilityWant?.parameters?.info;
      }
      //...
    }
    
  3. 在FuncAbility业务完成之后,如需要停止当前UIAbility实例,在FuncAbility中通过调用terminateSelf()方法实现。
    import { common } from '@kit.AbilityKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    
    const TAG: string = '[Page_FromStageModel]';
    const DOMAIN_NUMBER: number = 0xFF00;
    
    @Entry
    @Component
    struct Page_FromStageModel {
      build() {
        Column() {
          //...
          Button('FuncAbilityB')
            .onClick(() => {
              let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; // UIAbilityContext
              // context为需要停止的UIAbility实例的AbilityContext
              context.terminateSelf((err) => {
                if (err.code) {
                  hilog.error(DOMAIN_NUMBER, TAG, `Failed to terminate self. Code is ${err.code}, message is ${err.message}`);
                  return;
                }
              });
            })
        }
        //...
      }
    }
    

调用terminateSelf()方法停止当前UIAbility实例时,默认会保留该实例的快照(Snapshot),即在最近任务列表中仍然能查看到该实例对应的任务。如不需要保留该实例的快照,可以在其对应UIAbility的module.json5配置文件中,将abilities标签的removeMissionAfterTerminate字段配置为true。

  1. 如需要关闭应用所有的UIAbility实例,可以调用ApplicationContext的killAllProcesses()方法实现关闭应用所有的进程。

启动应用内的UIAbility并获取返回结果

在一个EntryAbility启动另外一个FuncAbility时,希望在被启动的FuncAbility完成相关业务后,能将结果返回给调用方。例如在应用中将入口功能和账号登录功能分别设计为两个独立的UIAbility,在账号登录UIAbility中完成登录操作后,需要将登录的结果返回给入口UIAbility。

  1. 在EntryAbility中,调用startAbilityForResult()接口启动FuncAbility,异步回调中的data用于接收FuncAbility停止自身后返回给EntryAbility的信息。
    import { common, Want } from '@kit.AbilityKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    import { promptAction } from '@kit.ArkUI';
    import { BusinessError } from '@kit.BasicServicesKit';
    
    const TAG: string = '[Page_UIAbilityComponentsInteractive]';
    const DOMAIN_NUMBER: number = 0xFF00;
    
    @Entry
    @Component
    struct Page_UIAbilityComponentsInteractive {
      build() {
        Column() {
          //...
          List({ initialIndex: 0 }) {
            ListItem() {
              Row() {
                //...
              }
              .onClick(() => {
                let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; // UIAbilityContext
                const RESULT_CODE: number = 1001;
                let want: Want = {
                  deviceId: '', // deviceId为空表示本设备
                  bundleName: 'com.samples.stagemodelabilitydevelop',
                  moduleName: 'entry', // moduleName非必选
                  abilityName: 'FuncAbilityA',
                  parameters: {
                    // 自定义信息
                    info: '来自EntryAbility UIAbilityComponentsInteractive页面'
                  }
                };
                context.startAbilityForResult(want).then((data) => {
                  if (data?.resultCode === RESULT_CODE) {
                    // 解析被调用方UIAbility返回的信息
                    let info = data.want?.parameters?.info;
                    hilog.info(DOMAIN_NUMBER, TAG, JSON.stringify(info) ?? '');
                    if (info !== null) {
                      promptAction.showToast({
                        message: JSON.stringify(info)
                      });
                    }
                  }
                  hilog.info(DOMAIN_NUMBER, TAG, JSON.stringify(data.resultCode) ?? '');
                }).catch((err: BusinessError) => {
                  hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability for result. Code is ${err.code}, message is ${err.message}`);
                });
              })
            }
            //...
          }
          //...
        }
        //...
      }
    }
    
  2. 在FuncAbility停止自身时,需要调用terminateSelfWithResult()方法,入参abilityResult为FuncAbility需要返回给EntryAbility的信息。
    import { common } from '@kit.AbilityKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    
    const TAG: string = '[Page_FuncAbilityA]';
    const DOMAIN_NUMBER: number = 0xFF00;
    
    @Entry
    @Component
    struct Page_FuncAbilityA {
      build() {
        Column() {
          //...
          List({ initialIndex: 0 }) {
            ListItem() {
              Row() {
                //...
              }
              .onClick(() => {
                let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; // UIAbilityContext
                const RESULT_CODE: number = 1001;
                let abilityResult: common.AbilityResult = {
                  resultCode: RESULT_CODE,
                  want: {
                    bundleName: 'com.samples.stagemodelabilitydevelop',
                    moduleName: 'entry', // moduleName非必选
                    abilityName: 'FuncAbilityB',
                    parameters: {
                      info: '来自FuncAbility Index页面'
                    },
                  },
                };
                context.terminateSelfWithResult(abilityResult, (err) => {
                  if (err.code) {
                    hilog.error(DOMAIN_NUMBER, TAG, `Failed to terminate self with result. Code is ${err.code}, message is ${err.message}`);
                    return;
                  }
                });
              })
            }
            //...
          }
          //...
        }
        //...
      }
    }
    
  3. FuncAbility停止自身后,EntryAbility通过startAbilityForResult()方法回调接收被FuncAbility返回的信息,RESULT_CODE需要与前面的数值保持一致。
    import { common, Want } from '@kit.AbilityKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    import { promptAction } from '@kit.ArkUI';
    import { BusinessError } from '@kit.BasicServicesKit';
    
    const TAG: string = '[Page_UIAbilityComponentsInteractive]';
    const DOMAIN_NUMBER: number = 0xFF00;
    
    @Entry
    @Component
    struct Page_UIAbilityComponentsInteractive {
      build() {
        Column() {
          //...
          List({ initialIndex: 0 }) {
            ListItem() {
              Row() {
                //...
              }
              .onClick(() => {
                let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; // UIAbilityContext
                const RESULT_CODE: number = 1001;
    
                let want: Want = {
                  deviceId: '', // deviceId为空表示本设备
                  bundleName: 'com.samples.stagemodelabilitydevelop',
                  moduleName: 'entry', // moduleName非必选
                  abilityName: 'FuncAbilityA',
                  parameters: {
                    // 自定义信息
                    info: '来自EntryAbility UIAbilityComponentsInteractive页面'
                  }
                };
                context.startAbilityForResult(want).then((data) => {
                  if (data?.resultCode === RESULT_CODE) {
                    // 解析被调用方UIAbility返回的信息
                    let info = data.want?.parameters?.info;
                    hilog.info(DOMAIN_NUMBER, TAG, JSON.stringify(info) ?? '');
                    if (info !== null) {
                      promptAction.showToast({
                        message: JSON.stringify(info)
                      });
                    }
                  }
                  hilog.info(DOMAIN_NUMBER, TAG, JSON.stringify(data.resultCode) ?? '');
                }).catch((err: BusinessError) => {
                  hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability for result. Code is ${err.code}, message is ${err.message}`);
                });
              })
            }
            //...
          }
          //...
        }
        //...
      }
    }
    

启动UIAbility的指定页面

一个UIAbility可以对应多个页面,在不同的场景下启动该UIAbility时需要展示不同的页面,可以通过如下方式进行。

调用方

调用方UIAbility启动另外一个UIAbility时,通常需要跳转到指定的页面。此时需要在传入的want参数中配置指定的页面路径信息,可以通过want中的parameters参数增加一个自定义参数传递页面跳转信息。

目标UIAbility冷启动

目标UIAbility冷启动时,在目标UIAbility的onCreate()生命周期回调中,接收调用方传过来的参数。然后在目标UIAbility的onWindowStageCreate()生命周期回调中,解析EntryAbility传递过来的want参数,获取到需要加载的页面信息url,传入windowStage.loadContent()方法。

目标UIAbility热启动

在应用开发中,会遇到目标UIAbility实例之前已经启动过的场景,这时再次启动目标UIAbility时,不会重新走初始化逻辑,只会直接触发onNewWant()生命周期方法。为了实现跳转到指定页面,需要在onNewWant()中解析参数进行处理。

【Harmony OS】【ARK UI】ets使用startAbility或startAbilityForResult方式调起Ability ets使用startAbility或startAbilityForResult方式调起Ability 阅读详情

相关推荐

【鸿蒙开发】学习笔录——通过startAbility拉起文件处理类应用

开发者可以通过调用startAbility接口,由系统从已安装的应用中寻找符合要求的应用来实现打开特定文件的意图,例如:浏览器下应用下载PDF文件,可以调用此接口选择文件处理应用打开此PDF文件。开发者需要在请求中设置待打开文件的URI路径(uri)、文件格式(type)等字段,以便系统能够识别,直接拉起文件打开应用或弹出一个选择框,让用户选择合适的应用来打开文件,效果示意如下图所示。表1 startAbility请求中。parameters 相关参数说明。flags 相关参数说明。

2401_88547687的博客 1097

【鸿蒙软件开发】UIAbility组件概况、生命周期与启动模式

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

m0_62599305的博客 6697

HarmonyOS 应用开发之页面栈及任务链

上文介绍了页面栈的返回,如果Ability2页面栈一层层通过返回键返回到最底层,再次点击返回键时,会返回到Ability1。因为在MissionList中记录了任务(Mission)之间的启动关系,即如果Ability1通过startAbility启动Ability2,则会形成一个MissionList任务链:Ability1->Ability2,当Ability2页面栈返回到首页时,再次点击返回键,会返回到Ability1的页面。5.鸿蒙音视频开发方向。6.鸿蒙车载开发方向。7.鸿蒙南向开发方向。

1 1296

鸿蒙知识总结

7、应用权限保护的对象可以分为数据和功能:数据包含了个人数据(如照片、通讯录、日历、位置等)、设备数据(如设备标识、相机、麦克风等)、应用数据。54、在Column容器中的子组件默认是按照从上到下的垂直方向布局的,其主轴的方向是垂直方向,在Row容器中的组件默认是按照从左到右的水平方向布局的,其主轴的方向是水平方向。5、在应用内的UIAbility组件间的交互中,可以通过Want的parameters来获取被拉起方UIAbility的Bundle Name等信息 (错误,把被子去掉就是对的)

东林知识库 2万+

HarmonyOs开发之———UIAbility进阶

本文深入解析了 HarmonyOS 中 UIAbility 的进阶特性,涵盖 AbilityStage 容器、启动模式、组件交互及应用包结构。合理运用这些特性可提升应用的灵活性和性能,尤其在复杂场景(如多实例管理、跨模块通信)中优势显著。开发时需结合业务需求选择合适的启动模式和组件间交互方式,并注意资源管理与性能优化。请注意,HarmonyOS的UI框架可能会随着版本的更新而有所变化,因此为了获取最新和最准确的属性说明和用法,建议查阅HarmonyOS的官方文档。如需了解更多请联系博主,本篇完。

this_is_bug的博客 287

单片机毕业设计-基于STM32单片机的智能镜系统-仿真设计

可通过MQ-2监测当前烟雾浓度可通过温湿度传感器监测当前温湿度可通过光照强度传感器监测光照强度可通过蜂鸣器进行烟雾报警可通过语音识别模块进行反馈播报状态可通过按键设置阈值三个继电器控制灯、加湿、风扇标签:STM32单片机、OLED112864、DHT11、BH1750、继电器、SU-03T、MQ-2、蜂鸣器题目扩展:智能家居安防、智能大棚控制系统、智能环境检测系统项目编号:ZL-32-240604-FZ。

bsdog11的博客 966

HarmonyOS实战开发:UIAbility组件基本用法

UIAbility组件的基本用法包括..........

2401_84194030的博客 1115

麒麟和UOS系统编写桌面点击可执行文件

在桌面上创建一个快捷方式(.desktop 文件)来运行脚本。打开文本编辑器,创建一个新文件,如。这可以通过文本编辑器来完成。首先,确保您的脚本具有执行权限。现在,您应该可以双击桌面上的。保存此文件到桌面目录,例如,在桌面上创建一个快捷方式(文件来运行您的脚本了。使用图形界面或命令行给。现在您可以双击桌面上的。为您脚本的实际路径。是您脚本的实际路径。文件来运行您的脚本了。

u013934107的博客 7246

HarmonyOS实战开发:任务(Mission)与启动模式

UIAbility实例个数与UIAbility配置的启动模式有关

2401_84194030的博客 1044

第二十届全国大学生智能汽车竞赛极速光电组:MicroPython与恩智浦RT1021的硬件编程实战指南

本文为参加第二十届全国大学生智能汽车竞赛极速光电组的同学提供了一份详尽的MicroPython与恩智浦RT1021硬件编程实战指南。文章深入剖析了选择MicroPython与RT1021这对组合的优势,详细讲解了从开发环境搭建、基础硬件控制(如GPIO、PWM、编码器、CCD)到系统集成(平衡控制、循迹算法)与多任务调试的全过程,旨在帮助参赛者降低嵌入式开发门槛,高效备赛。

wdx0123456的博客 843

【实战篇】【硅基流动API+Cherry Studio搭建个人知识库全流程解析:从零到精通的超详细指南】

在人工智能技术高速发展的今天,基于大语言模型的知识库已成为开发者提效的必备工具。然而云端服务存在响应延迟、数据隐私、硬件依赖等痛点。通过硅基流动API与的深度整合,我们既能享受大模型的强大能力,又能实现本地化部署与高效管理。本文将从环境配置到高阶调优,手把手带你构建企业级知识库系统。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1081

HarmonyOS NEXT开发进阶(十):UIAbility 组件交互

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,该UIAbility可以是应用内的其他UIAbility,也可以是其他应用的UIAbility(例如启动三方支付UIAbility。

IT全栈 华强工作室 1600

电机控制的智慧之眼:全面解析FOC状态观测器

摘要:本文深入探讨磁场定向控制(FOC)中的状态观测器技术,重点分析其在无传感器电机控制中的关键作用。文章详细介绍了滑模观测器(SMO)、扩展卡尔曼滤波(EKF)、龙贝格观测器和高频注入法等主流观测器的工作原理、技术特点及适用场景,其中SMO因结构简单、鲁棒性强成为当前主流方案。同时阐述了观测器与锁相环(PLL)结合的工程实践方案,并针对不同应用场景提供了观测器选型建议。文章还探讨了启动问题处理、参数敏感性等工程挑战的解决方案,以及混合观测器、AI应用等未来发展趋势。这些观测器技术使电机系统在无机械传感器情

汽车软件开发 274

鸿蒙开发进阶必备!UIAbility 深度解析,吃透 Stage 模型与组件交互

华为开发者学院推出《UIAbility进阶》课程(22分钟),聚焦鸿蒙应用Stage模型的高级开发技巧。课程涵盖三大核心内容:1)模型架构解析,明确UIAbility定位;2)启动模式深度解析与场景适配;3)跨组件交互实战技巧。亮点在于聚焦复杂场景开发痛点,结合架构理论与实操演练,官方权威内容直击开发者进阶需求。适合具备UIAbility基础的开发者学习,帮助掌握多启动模式配置、组件间数据传递等关键技能,快速提升复杂鸿蒙应用开发能力。通过课程可系统构建Stage模型认知,为开发高交互性应用奠定基础。

luxy2004的博客 1126

安装glibc出现../sysdeps/nptl/pthread.h:744:47:error:argument 1 of type ‘struct __jmp_buf_tag *‘ 解决方案

本文主要介绍了安装glibc出现…/sysdeps/nptl/pthread.h:744:47:error:argument 1 of type ‘struct __jmp_buf_tag *’ 解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

MGC3130 3D手势识别传感器原理图设计,已量产(交互传感器)

最近在落地一款互动艺术装置的控制模块,选了 Microchip 的 MGC3130 做核心 —— 这颗芯片算是 GestIC® 近场传感技术的 “熟面孔” 了,把 3D 手势识别、运动跟踪的信号处理都集成在一颗芯片里,0-10cm 的检测距离刚好适配桌面级互动场景,挥挥手就能控设备的体验,放在艺术装置里确实很出效果。今天扒一下实际跑通的原理图,聊聊每个模块的设计思路。

不脱发的程序猿 369

HarmonyOS NEXT开发进阶(九):UIAbility 组件生命周期及启动模式讲解

UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口;一个UIAbility组件中可以通过多个页面来实现一个功能模块。每一个UIAbility组件实例,都对应于一个最近任务列表中的任务。UIAbility组件就像手机上的一个应用,它负责展示应用的用户界面,用户可以通过它来和应用进行互动。每个UIAbility组件可以包含多个不同的界面,就像应用中的不同页面。用户每次在手机上打开一个应用,实际上是启动了一个。

IT全栈 华强工作室 2123

固定效应模型-以stata为工具

固定效应模型(Fixed Effects Model)是一种面板数据分析方法,通过引入个体固定效应来控制个体间的异质性,并更准确地估计解释变量对因变量的影响。它在许多经济、社会科学和健康研究中被广泛应用。

侯小啾技术博客 2837

HarmonyOS 应用开发之组件启动规则(Stage模型)(2),2024年最新源码+原理+手写框架

上述组件启动规则自API 9版本开始生效。开发者需熟知组件启动规则,避免业务功能异常。启动组件的具体校验流程见下文。前后台应用的判断依据:若应用进程获焦或所属的UIAbility组件位于前台则判定为前台应用,否则为后台应用。

2401_84166147的博客 950

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

UIAbility进阶之基本概念

本文介绍了HarmonyOS应用开发中的关键概念:UIAbility组件(用于用户交互的主界面组件)、ExtensionAbility组件(基于特定场景的功能组件)、HAP(应用安装基本单位)和AbilityStage(模块级组件容器)。重点分析了运行期与编译期的对应关系,以及UIAbility与WindowStage生命周期分离的设计优势:实现业务/UI逻辑分离、支持设备裁剪和跨设备统一生命周期管理。通过单窗口/多窗口场景对比,展示了这种设计对任务切换的灵活支持,为开发者提供了更高效的开发模式。

华为资深保安(外包) 966

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[学习日志]1day UIAbility

UIAbility组件是HarmonyOS中一种包含UI界面的应用组件,主要用于与用户进行交互。每个UIAbility组件实例对应最近任务列表中的一个任务,可以包含多个页面来实现不同功能模块。

Cyx080811的博客 2801

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

鸿蒙应用开发快速学习指南(中级篇-1 应用程序框架进阶)

在官方的介绍中:AbilityStage是一个。

weixin_52490101的博客 2951

HarmonyOS-中级(一)

HarmonyOS中级知识,笔记记录

DC_BLOG的博客 721

HarmonyOS应用六之应用程序进阶一

ArkUI监听到AppStorage中key值为“collectedIds”的值变化,只会通知所有绑定了AppStorage中key值为“collectedIds”变量的组件重新渲染,不会造成“我的“模块用户信息组件“UserInfoView ”重新渲染。当ClassA实例的属性e中的属性c的值变化时,状态变化会通知使用ClassE实例的组件重新渲染,不会通知所有使用AppStorage中ClassA实例的组件更新,即只使用了ClassA实例b属性的组件不会重新渲染。

zouyang920的博客 1868

深入解读鸿蒙Stage模型(2),2024年最新阿里P7级别面试经验总结

通常情况下,应用如果可自行决定创建多少个进程、自定义服务时,系统为保证用户体验,需要在后台运行管控、进程关联启动等方面对应用的运行状态进行强管理,从而降低系统总体的内存占用和功耗开销。Stage模型基于场景的服务扩展、严格的后台管控机制和受限的进程模型,重新定义了应用能力边界,使进程环境从“无序”到“有序”,规范了进程管理模型。

2401_84166811的博客 473

【新书推荐】《HarmonyOS NEXT应用开发实践(视频教学版)》

HarmonyOS是一款面向未来、面向全场景的分布式操作系统,借助HarmonyOS全场景分布式系统和设备生态,定义全新的硬件、交互和服务体验。本书基于华为的HarmonyOS Next版本,详细介绍HarmonyOS 应用开发方法,配套示例代码、PPT课件、教学大纲、教学视频与读者微信群等技术交流服务。

夏天又到了的专栏 798
上一篇: ArkUI-Navigation
下一篇: ArkUI进阶-性能优化
gitzzp
博客等级 码龄11年 307粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值