鸿蒙学习1概况

前言

有时间多看官网,官网的才是一手资料。
对比其他语言,以前学起来官网都在国外,不是打开不流畅,就是外语不精通。鸿蒙官网,母语学习自带buf,你懂的。
——以前是没机会,现在想做个好人

为什么刚开始学习就看概念,不应该是敲第一行代码么。没错。我是先把官网的第一课学了,并且通过了基础认证才想着写帖子总结下的。所以对于小白,还是可以先看官网的第一课的。非常基础的课程。
毕竟,一开始没事瞎看看的。这不是裸辞在家,才有空写帖子呀。

全局思维从整体看 鸿蒙应用。Stage模型概念清晰且重要

在这里插入图片描述

相关概念

Stage 模型

Stage 模型

从官网搬过来的
在这里插入图片描述

1. AbilityStage
  • 每个Entry类型或者Feature类型的HAP在运行期都有一个AbilityStage类实例,当HAP中的代码首次被加载到进程中的时候,系统会先创建AbilityStage实例。
  • AbilityStage与Module一一对应
2. UIAbility组件和ExtensionAbility组

Stage模型提供UIAbility和ExtensionAbility两种类型的组件,这两种组件都有具体的类承载,支持面向对象的开发方式。
UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。
UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。
一个应用可以包含一个或多个UIAbility组件。例如,在支付应用中,可以将入口功能和收付款功能分别配置为独立的UIAbility。

UIAbility的设计理念:

  1. 原生支持应用组件级的跨端迁移和多端协同。
  2. 支持多设备和多窗口形态。

图中 UIAbility:page 1:N 的概念,类似。android的 单activity,多fragment应用。android这方面做的不好,开发者也没那个功夫搞单activity应用。

● 如果开发者希望在任务视图中看到一个任务,则建议使用一个UIAbility,多个页面的方式。
● 如果开发者希望在任务视图中看到多个任务,或者需要同时开启多个窗口,则建议使用多个UIAbility开发不同的模块功能。

3. WindowStage

类似Android 的window
每个UIAbility类实例都会与一个WindowStage类实例绑定,WindowStage类起到了应用进程内窗口管理器的作用,它包含一个主窗口。也就是说,UIAbility通过WindowStage持有了一个窗口,该窗口为ArkUI提供了绘制区域。

4. Context

在Stage模型上,Context及其派生类向开发者提供在运行期可以调用的各种能力。UIAbility组件和各种ExtensionAbility派生类都有各自不同的Context类,他们都继承自基类Context,但是各自又根据所属组件,提供不同的能力。

在这里插入图片描述
各类Context的持有关系
在这里插入图片描述

State
     -Module(模块-对应Hap包)
         -ability(应用服务入口)
            -pages(页面)
              -component(自定义组件)
            -resources(资源)

来自黑马程序

事件传递

UIAbility和Page交互

UIAbility组件与UI的数据同步
  • EventHub进行数据通信

    • 事件需要先订阅后发布,订阅者收到消息后进行处理。
  • globalThis进行数据同步

    • ArkTS引擎实例内部的一个全局对象,在ArkTS引擎实例内部都能访问
    • 使用globalThis时需要避免存放相同名称的对象。例如AbilityA和AbilityB可以使用globalThis共享数据,在存放相同名称的对象时,先存放的对象会被后存放的对象覆盖。
      在这里插入图片描述
  • AppStorage/LocalStorage进行数据同步

    • 可用于实现应用级别和UIAbility级别的数据同步
UIAbility组件间交互(设备内)
进程模型
  • 应用中(同一包名)的所有UIAbility运行在同一个独立进程中。
  • WebView拥有独立的渲染进程。
  • CES(Common Event Service,公共事件服务)
    • 系统公共事件和自定义公共事件
      • 系统公共事件 只有系统应用和系统服务才能发布,例如HAP安装,更新,卸载等公共事件
    • 三种事件类型
      • 无序公共事件
      • 有序公共事件
      • 粘性公共事件 发送粘性事件必须是系统应用或系统服务,且需要申请ohos.permission.COMMONEVENT_STICKY权限
    • 订阅方式 两种 subscriber
      • 动态订阅
      • 静态订阅
    • 发布事件 publish
线程模型
* 主线程
* 子线程
	* Worker 最多8个
	* TaskPool 线程池
* 线程间通信
	* Emitter
	* Worker
	* globalThis

相关推荐

  1. 学习鸿蒙基础(1

    2024-05-01 13:12:02       54 阅读
  2. 机器学习1)基础概念

    2024-05-01 13:12:02       45 阅读
  3. Onnx 1-深度学习-概述1

    2024-05-01 13:12:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 13:12:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 13:12:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 13:12:02       87 阅读
  4. Python语言-面向对象

    2024-05-01 13:12:02       96 阅读

热门阅读

  1. H.264码流解析

    2024-05-01 13:12:02       30 阅读
  2. Nacos和Eureka有什么区别

    2024-05-01 13:12:02       32 阅读
  3. 指代消解原理

    2024-05-01 13:12:02       28 阅读
  4. Day41 HTTP编程

    2024-05-01 13:12:02       32 阅读
  5. 邦芒面试:面试时,如何展现卓越的口才

    2024-05-01 13:12:02       30 阅读
  6. 程序员商业模式画布

    2024-05-01 13:12:02       26 阅读
  7. 云计算与云服务

    2024-05-01 13:12:02       37 阅读
  8. 云计算知识点-02

    2024-05-01 13:12:02       34 阅读
  9. LLM系列(2):开源LLM Promp调优之道进阶指南

    2024-05-01 13:12:02       39 阅读
  10. typescript学习笔记

    2024-05-01 13:12:02       39 阅读
  11. html中引用视频文件的方式有哪些?

    2024-05-01 13:12:02       118 阅读
  12. 基于docker-compose使用虚拟机搭建redis集群

    2024-05-01 13:12:02       34 阅读
  13. GBCD:图卷积宽度跨域推荐系统

    2024-05-01 13:12:02       39 阅读