鸿蒙不再适合JS语言开发

ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式UI、状态管理等相应的能力,让开发者可以以更简洁、更自然的方式开发高性能应用。


鸿蒙本身有两套架构模型
一种是Stage模型 

一种是FA模型 已经不再主推

基于Js应用的只有FA模型

到底什么是模型?其实是组件,进程,线程,任务,窗口等FrameWork
官方解释为:

HarmonyOS应用模型的构成要素包括:

  1. 应用组件

    应用组件是应用的基本组成单位,是应用的运行入口。用户启动、使用和退出应用过程中,应用组件会在不同的状态间切换,这些状态称为应用组件的生命周期。应用组件提供生命周期的回调函数,开发者通过应用组件的生命周期回调感知应用的状态变化。应用开发者在编写应用时,首先需要编写的就是应用组件,同时还需编写应用组件的生命周期回调函数,并在应用配置文件中配置相关信息。这样,操作系统在运行期间通过配置文件创建应用组件的实例,并调度它的生命周期回调函数,从而执行开发者的代码。

  2. 应用进程模型

    应用进程模型定义应用进程的创建和销毁方式,以及进程间的通信方式。

  3. 应用线程模型

    应用线程模型定义应用进程内线程的创建和销毁方式、主线程和UI线程的创建方式、线程间的通信方式。

  4. 应用任务管理模型

    应用任务管理模型定义任务(Mission)的创建和销毁方式,以及任务与组件间的关系。HarmonyOS应用任务管理由系统应用负责,三方应用无需关注,下文不做具体介绍。

  5. 应用配置文件

    应用配置文件中包含应用配置信息、应用组件信息、权限信息、开发者自定义信息等,这些信息在编译构建、分发和运行阶段分别提供给编译工具、应用市场和操作系统使用。

  • FA(Feature Ability)模型:HarmonyOS早期版本开始支持的模型,已经不再主推。

  • Stage模型:HarmonyOS 3.1 Developer Preview版本开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。

Stage模型之所以成为主推模型,源于其设计思想。Stage模型的设计基于如下出发点。

  1. 为复杂应用而设计

    • 多个应用组件共享同一个ArkTS引擎(运行ArkTS语言的虚拟机)实例,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。
    • 采用面向对象的开发方式,使得复杂应用代码可读性高、易维护性好、可扩展性强。
  2. 支持多设备和多窗口形态

    应用组件管理和窗口管理在架构层面解耦:

    • 便于系统对应用组件进行裁剪(无屏设备可裁剪窗口)。

    • 便于系统扩展窗口形态。

    • 在多设备(如桌面设备和移动设备)上,应用组件可使用同一套生命周期。

  3. 平衡应用能力和系统管控成本

    Stage模型重新定义应用能力的边界,平衡应用能力和系统管控成本。

    • 提供特定场景(如卡片、输入法)的应用组件,以便满足更多的使用场景。
    • 规范化后台进程管理:为保障用户体验,Stage模型对后台应用进程进行了有序治理,应用程序不能随意驻留在后台,同时应用后台行为受到严格管理,防止恶意应用行为

通过对比认识FA模型与Stage模型

Stage模型与FA模型最大的区别在于:Stage模型中,多个应用组件共享同一个ArkTS引擎实例;而FA模型中,每个应用组件独享一个ArkTS引擎实例。因此在Stage模型中,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。Stage模型作为主推的应用模型,开发者通过它能够更加便利地开发出分布式场景下的复杂应用。

可通过如下对比表格了解两种模型的整体概况。

表1 FA模型与Stage模型差异概览

项目

FA模型

Stage模型

应用组件

1. 组件分类

 - PageAbility组件:包含UI界面,提供展示UI的能力。详细介绍请参见PageAbility组件概述。

- ServiceAbility组件:提供后台服务的能力,无UI界面。详细介绍请参见ServiceAbility组件概述。

- DataAbility组件:提供数据分享的能力,无UI界面。详细介绍请参见DataAbility组件概述。

2. 开发方式

通过导出匿名对象、固定入口文件的方式指定应用组件。开发者无法进行派生,不利于扩展能力。

1. 组件分类

 - UIAbility组件:包含UI界面,提供展示UI的能力,主要用于和用户交互。详细介绍请参见UIAbility组件概述。

- ExtensionAbility组件:提供特定场景(如卡片、输入法)的扩展能力,满足更多的使用场景。详细介绍请参见ExtensionAbility组件。

2. 开发方式

采用面向对象的方式,将应用组件以类接口的形式开放给开发者,可以进行派生,利于扩展能力。

进程模型

有两类进程:

1. 主进程

2. 渲染进程

详细介绍请参见进程模型。

有三类进程:

1. 主进程

2. ExtensionAbility进程

3. 渲染进程

详细介绍请参见进程模型。

线程模型

1. ArkTS引擎实例的创建

一个进程可以运行多个应用组件实例,每个应用组件实例运行在一个单独的ArkTS引擎实例中。

2. 线程模型

每个ArkTS引擎实例都在一个单独线程(非主线程)上创建,主线程没有ArkTS引擎实例。

3. 进程内对象共享:不支持。

详细介绍请参见线程模型。

1. ArkTS引擎实例的创建

一个进程可以运行多个应用组件实例,所有应用组件实例共享一个ArkTS引擎实例。

2. 线程模型

ArkTS引擎实例在主线程上创建。

3. 进程内对象共享:支持。

详细介绍请参见线程模型。

应用配置文件

使用config.json描述应用信息、HAP信息和应用组件信息。

详细介绍请参见应用配置文件概述(FA模型)。

使用app.json5描述应用信息,module.json5描述HAP信息、应用组件信息。

详细介绍请参见应用配置文件概述(Stage模型)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/456282.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql事务(MVCC机制:undo日志)(mysql执行过程:redo日志,Buffer Pool缓存池)

事务 目的:保证数据的最终一致性## 事务的目的 事务的4大特性(ACID) 1.原子性(Atomicity):由undo log日志来保证 2.一致性(Consistency):使用事务的最终目的,由业务代码正确逻辑保证,比如错误的try-catch 3.隔离性(Isolation):…

在任意一个文件下,进入cmd

直接在界面上输入cmd,回车就出来了

安卓六大布局

LinearLayout(线性布局) 1.简介 线性布局在开发中使用最多,具有垂直方向与水平方向的布局方式。LinearLayout 默认是垂直排列的,但是可以通过设置 android:orientation 属性来改变为水平排列。 2.常用属性 orientation&#xf…

Windows系统下载安装Emby结合内网穿透实现公网访问本地影音网站

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…

3.2 RK3399项目开发实录-初次使用的环境搭建(物联技术666)

通过百度网盘分享的文件:嵌入式物联网单片… 链接:https://pan.baidu.com/s/1Zi9hj41p_dSskPOhIUnu9Q?pwd8qo1 提取码:8qo1 复制这段内容打开「百度网盘APP 即可获取」 1. 用户和密码 1.1. Ubuntu Desktop 系统 Ubuntu Desktop 系统开机启动后,自动登录…

权限管理和操作指令

文章目录 前言一、文件的权限分类二、操作时无相应权限解决办法1.使用sudo指令2.修改文档权限 总结 前言 💦 Linux操作系统中,主要都是对文件进行操作,完成读写或者执行功能。Ubuntu 下我们会常跟用户权限打交道,权限就是用户对于…

python操作dataframe--打乱df的顺序

在Python中,可以使用Pandas库来操作DataFrame。要打乱DataFrame的顺序,可以使用sample方法来实现。以下是一个示例代码: import pandas as pd# 创建一个示例DataFrame data {A: [1, 2, 3, 4, 5],B: [10, 20, 30, 40, 50]} df pd.DataFrame…

为什么ERP与MES集成那么难搞?怎么有效解决这一难题

在现代企业信息化进程中,ERP(企业资源规划)和MES(制造执行系统)作为企业管理的核心信息系统,它们之间的深度集成是提升生产效率、实现精益管理和智能决策的关键环节。然而,ERP与MES集成并非易事…

【Python】成功解决NameError: name ‘sns‘ is not defined

【Python】成功解决NameError: name ‘sns’ is not defined 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您…

1个二维码能包含多个视频吗?制作视频二维码的方法

二维码在生活中现在随处可见,除了用于支付之外,展示内容也可以通过二维码来展现,比如常见的视频、图片、文件、音频等内容都可以通过二维码来展现。那么当我们需要将多个视频存入一个二维码中展示时,该如何利用二维码生成器的工具…

开发知识点-python-Tornado框架

介绍 Tornado是一个基于Python语言的高性能Web框架和异步网络库,它专注于提供快速、可扩展和易于使用的网络服务。由于其出色的性能和灵活的设计,Tornado被广泛用于构建高性能的Web应用程序、实时Web服务、长连接的实时通信以及网络爬虫等领域。 Torna…

jmeter接口自动化测试通过csv文件读取用例并执行测试

最近在公司测试中经常使用jmeter这个工具进行接口自动化,简单记录下~ 一、在csv文件中编写好用例 首先在csv文件首行填写相关参数(可根据具体情况而定)并编写测试用例。脚本可通过优先级参数控制执行哪些接口,通过端口参数同时执…

leetcode110.平衡二叉树

之前没有通过的样例 return语句只写了一个 return abs(l-r)<1缺少了 isBalanced(root->left)&&isBalanced(root->right);补上就好了 class Solution { public:bool isBalanced(TreeNode* root) {if(!root){return true;}int lgetHeight(root->left);i…

第三百九十一回

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍如何通过相机获取视频文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. …

很多人不懂这个伦敦金短线操作的心法

很多投资者进入伦敦金市场&#xff0c;是看中了它很适合短线操作的这个特点。确实&#xff0c;伦敦金不光可以实现双向T0的交易&#xff0c;而且还有24小时交易和保证金交易的特点&#xff0c;这些特点令伦敦金成为一个十分适合短线交易的品种。但是投资者如何在伦敦金短线交易…

提高转换效率的利器NCP13992ACDR2G 高性能电流模式LLC谐振变换器控制芯片

NCP13992ACDR2G产品概述&#xff1a; NCP13992ACDR2G是一款用于半桥谐振变换器的高性能电流模式控制器。该控制器实现了600 V栅极驱动器&#xff0c;简化了布局并减少了外部组件数量。内置的Brown−Out输入功能简化了控制器在所有应用程序中的实现。在需要PFC前级的应用中&…

RUST 每日一省:rust logo收集

rust的logo集合&#xff0c;看看有没有你喜欢的&#xff0c;挑一个吧&#xff1b; GitHub - XuHugo/rust-logo: Collection of logo images for all rust languages 下边只是挑选了几个&#xff0c;更多的还是看github吧。

mysql 主从延迟分析

一、如何分析主从延迟 分析主从延迟一般会采集以下三类信息。 从库服务器的负载情况 为什么要首先查看服务器的负载情况呢&#xff1f;因为软件层面的所有操作都需要系统资源来支撑。 常见的系统资源有四类&#xff1a;CPU、内存、IO、网络。对于主从延迟&#xff0c;一般会…

【LeetCode热题100】206. 反转链表(链表)

一.题目要求 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 二.题目难度 简单 三.输入样例 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2…

TS使用el-tree拖拽结构+点击写法

1.结构分两块 <template><div style"height:96%;width:100%;max-width:1920px;max-height:1080px;background-color:white;padding:20px;display: flex;flex-direction:row; "><!-- 左侧树 --><div style"height:100%;width:32%;"&g…