基于《2022重庆邮电大学-HarmonyOS移动应用开发》的学习【6-11】 原创 精华
【本文正在参与优质创作者激励】
Author:Hairtail
HarmonyOS移动应用开发课程链接
基于《2022重庆邮电大学-HarmonyOS移动应用开发》的学习【1-5】
六、HarmonyOS JS UI前端开发
(一)JS前端开发基础
1.框架介绍
- JS UI框架是一种跨设备的高性能UI开发框架,支持声明式编程和跨设备多态UI
- 基础能力:
- 声明式编程
- 跨设备
- 高性能
- JS UI框架包括应用层(Application)、前端框架层(Framework)、引擎层(Engine) 和平台适配层(Porting Layer)
- Application应用层,JS FA应用
- Framework前端框架层,完成前端页面解析,提供相应能力
- Engine引擎层,提供解析、构建、计算、渲染、管理等能力
- Porting Layer适配层,成对平台层进行抽象,提供抽象接口,可以对接到系统平台
2.JS FA的使用
(1)AceAbility
- JS FA是基于AceAbility类,而AceAbility是继承于Ability
(2)如何加载JS FA
- 生命周期分类
- 应用生命周期
- 页面生命周期
- 通过setInstanceName()接口设置该Ability的实例资源,参数是指实例名称,与config.json文件 中module.js.name的值对应
- 加载主页面:
//在MainAbility的onStart()中的super.onStart()前调
用此接口
public class MainAbility extends AceAbility {
@Override
public void onStart(Intent intent) {
setInstanceName("JSComponentName");
// config.json配置文件中module.js.name的标签值
super.onStart(intent);
}
}
(3)JS FA开发目录
(二)一个典型JS FA应用开发
(三)构建用户界面
1.基础组件
- 分类:基础组件、容器组件、媒体组件、画布组件
- 组件通用特性:HarmonyOS官方文档-通用
- 通用属性(标识、外观)
- 通用样式(大小、位置)
- 通用事件(动态交互-手势事件、按键事件)
2.构建布局
- 布局:一个页面的基本元素包含标题区域、文本区域、图片区域等
- 需要思考的问题:
- 组件尺寸、排列位置
- 是否有重叠部分
- 是否需要设置对齐、内间距或者边界
- 是否包含子元素及其排列位置
- 是否需要容器组件及其类型
- 步骤:
- 页面分解
- 定义文档结构
- 定义文档样式
- 动态内容与交互
- 添加图片区域
3.容器组件
- 可以理解为盒子
- 常见的
- div
- list(列表)
- tabs(标签)
- dialog(自定义弹窗)
- form(表单)
- 注意:dialog仅支持单子组件、tabs适用于需要频繁切换和加载、list适用于长列表
4.添加交互
- 以一个点赞交互为例
- div里面(image+text)
- 点击赞的图片,图片变化、text文本点赞数也变化
- 步骤:
- 页面构建(设置伪类:focusable、动态数据绑定)
- 添加交互(onclick事件)
5.页面路由
- 调用 router.push()接口将uri指定的页面添加到路由栈中,即跳转到uri指定的页面
6.焦点逻辑
- 焦点移动是智慧屏的主要交互方式,其规则
- 容器组件焦点分发逻辑:容器组件在第一次获焦时焦点一般都落在第一个可获焦的子组件上, 再次获焦时焦点落在上一次失去焦点时获焦的子组件上。容器组件一般都有特定的焦点分发逻辑
- 每个组件获焦方式
- list组件每次获焦时会使第一个可获焦的item获 焦
- stack组件只能由自顶而下的第一个可获焦的子组件获焦
- swiper的每个页面和refresh的页面的焦点逻辑都与div的相同
- tab-bar中的子组件默认都能获焦,与是否有可获 焦的叶子结点无关
- dialog的button可获焦,若有多个button,默认初始焦点落在第二个button上
- popup无法获焦
(四)动画
1.静态动画
- 核心是transform样式(对于静态动画你可以看到动起来后的效果)
- 即:静态动画只有开始状态和结束状态,没有中间状态
- translate:沿水平或垂直方向将指定组件移动所需距离
- scale:横向或纵向将指定组件缩小或放大到所需比例
- rotate:将指定组件沿横轴或纵轴或中心点旋转指定的角度
2.连续动画
- 连续动画的核心是animation样式(需要定义关键帧keyframe)
- animation-name:设置动画执行后应用到组件上的背景颜色、透明度、宽高和变换类型;
- animation-delay和animation-duration:分别设置动画执行后元素延迟和持续的时间;
- animation-timing-function:描述动画执行的速度曲线,使动画更加平滑;
- animation-iteration-count:定义动画播放的次数;
- animation-fill-mode:指定动画执行结束后是否恢复初始状态
(五)用户交互
- 手势事件
- 触摸
- 点击
- 长按
- 按键事件(用户点击一个遥 控器按键,通常会触发两次key事件)
- 语音事件
- 多模输入:多模输入使HarmonyOS的UI控件能够响应多种输入事件,事件来源于用户的按键、点击、 触屏、语音等。提供创建事件能力和获取输入设备信息能力。
(六)自定义组件
- 什么时候需要自定义组件:特殊需求,后续需要反复使用
- 流程:封装成的新组件->element引入组件->使用组件
(七)JS FA调用PA
- FA调用PA两种方法
- Ability
- Internal Ability两
Ability:拥有独立的Ability生命周期,FA使用远端进程通信拉起并请求PA服务,适用于基本服 务供多FA调用或者服务在后台独立运行的场景
Internal Ability:与FA共进程,采用内部函数调用的方式和FA进行通信,适用于对服务响应时 延要求较高的场景。该方式下PA不支持其他FA访问调用
-
交互流程:JS端与Java端通过bundleName和abilityName来进行关联。在系统收到JS调用请求后, 根据开发者在JS接口中设置的参数来选择对应的处理方式。开发者在
onRemoteRequest()
中实现PA提供的业务逻辑 -
FA调用PA接口:
- FA端提供:
- FeatureAbility.callAbility(OBJECT):调用PA能力;
- FeatureAbility.subscribeAbilityEvent(OBJECT, Function):订阅PA能力
- FeatureAbility.unsubscribeAbilityEvent(OBJECT):取消订阅PA能力
- PA端提供:
- IRemoteObject.onRemoteRequest(int,MessageParcel, MessageParcel, MessageOption):Ability调用方式,FA使用远端进程通信拉起并请求PA服务
- AceInternalAbility.AceInternalAbilityHandler.onRemoteRequest(int, MessageParcel, MessageParcel, MessageOption):Internal Ability调用方式,采用内部函数调用的方式 和FA进行通信
- FA端提供:
-
Ability和Internal Ability的区别
(八)测一测
1.应用层-前端框架层-引擎层-平台适配层
2.组件的尺寸和排列位置、是否需要设置对齐、内间距或者边界、是否包含子元素及其排列位置、是否需要容器组件及其类型
3.×
4.提高页面布局代码的可读性、提高常用功能的重用性
5.静态动画、连续动画
6.是否需要修改config.json文件、是否需要在FA中注册、是否能被其他应用的FA访问
7.√
8.×
七、HarmonyOS数据持久化
- 持久化:就是把数据存储在设备上
(一)创建Data Ability
- PA支持DA和SA,这里的DA就是Data Ability,提供数据服务
- 数据的存放形式多样,可以是数据库,也可以是磁盘上的文件。Data对外提供对数据的 增、删、改、查,以及打开文件等接口,这些接口的具体实现由开发者提供。Data提供了两组接口:
- 文件存储
- 数据库存储
- 在存储数据时,需要确定数据存储方式
- 文件数据:如文本、图片、音乐等
- 结构化数据:如数据库等
- Ability定义了6个方法供用户处理对数据库表数据的增删改查
- 实现UserDataAbility(用于接收其他应用发送的请求,提供外部程序访问的入口,从而实现应用间的数据访问)
- (1)创建UserDataAbility
- (2)注册UserDataAbility(配置文件中该字段在创建Data Ability时会自动创建)
- 需要关注:type、uri、permission三个属性
- uri是标识一个具体的数据格式:
(二)文件存储
-
代码中的操作:
- ohos.rpc.MessageParcel类提供了一个静态方法,用于获取MessageParcel实例。开发者可通过获取到的MessageParcel实例,使用dupFileDescriptor()函数复制待操作文件流的文件描述符,并将其返回,供远端应用访问文件
-
Data Ability是服务端、DataAbilityHelper作为客户端
-
使用DataAbilityHelper的步骤:
-
(1)生命使用权限(文件、系统)
-
(2)创建DataAbilityHelper(使用creator()方法创建)
-
DataAbilityHelper helper = DataAbilityHelper.creator(this);
-
-
(3)访问Data Ability(了FileDescriptor openFile(Uri uri, String mode)方法操作文件)
-
(三)关系数据库
- 轻量级的关系数据库,基于SQLite组件提供了一套完整的对本地数据库进行管理的机 制,对外提供了一系列的增、删、改、查接口
- 特别是查询效率很高
- 基本概念:
- 关系型数据库:创建在关系模型基础上的数据库,以行和列的形式存储数据
- SQLite:是轻型的数据库
- 谓词:用来 定义数据库的操作条件
- 结果集:方便的拿到用户想要的数据
- 运行机制:
- 对外提供通用的操作接口,底层使用SQLite作为持久化存储引 擎,支持SQLite具有的所有数据库特性,包括但不限于事务、索引、视图、触发器、外 键、参数化查询和预编译SQL语句
- 数据库的增删改查:
- 开发步骤:
- (1)创建数据库(配置信息、初始化内容、创建数据库)
- (2)插入数据(构造数据以以ValuesBucket存储、调用插入接口)
- (3)查询数据(构造对象、设置查询条件、指定查询行列、调用查询接口、返回查询结果)
(四)对象关系数据库
- 对象关系映射数据库:基于 SQLite的数据库框架,屏蔽了底层SQLite数据库的SQL操作,针对实体和关系提供了增删改查等一系列的面向对象接口
- 三个主要组件:
- (1)数据库:被开发者用**@Database注解**,且继承了OrmDatabase的类,对应关系型数据库
- (2)实体对象:被开发者用**@Entity注解**,且继承了OrmObject的类,对应关系型数据库中的表;
- (3)对象数据操作接口:包括数据库操作的入口OrmContext类和谓词接口(OrmPredicate)等
- 运行机制:
- 实际是在关系型数据库 操作的基础上又实现了对象关系映射等特性
- 对象数据对象操作接口:(不需要再和复杂的 SQL语句打交道,只需简单地操作实体对 象的属性和方法)
- ORM开发步骤:
- (1)创建数据库(定义一个表示数据库的类,继承OrmDatabase,再通过 @Database注解内的entities属性指定哪些数据模型类属于这个数据库)
- (2)创建数据表(创建一个继承了OrmObject并用**@Entity注解**的类,获取数据 库实体对象,也就是表的对象)
- (3)初始化数据库连接(在应用启动时调用onStart()方法创建Data实例)
- (4)数据库操作-OR Mapping(ORM)
- query():该方法接收三个参数,分别是查询的目标路径,查询的列名,以及查询条 件
- insert():该方法接收两个参数,分别是插入的目标路径和插入的数据值
- delete():该方法用来执行删除操作
- 数据服务端开发步骤:
- (1)配置“build.gradle”文件
- (2)创建数据库类并配置对应的属性(构建数据库)
- (3)创建数据库实体类并配置对应的属性(构造数据库表)
- (4)使用对象数据操作接口OrmContext创建数据库
- (5)使用对象数据操作接口OrmContext对数据库进行增删改查、注册观察者、备份数据库等
(五)偏好文件
- 轻量级偏好文件:主要提供轻量级Key-Value操作,支持本地应用存储少量数据,数据存储在本地文件中,同时也加载在内存中的
- 访问速度更快、效率高
- 非关系型数据库
- 不宜存储大量数据
- 基本概念:
- Key-Value数据库:一种以键值对存储数据的一种数据库,类似Java中的map。Key是关 键字,Value是值。
- 非关系型数据库:不采用关系模型来组织数据,数据之间无关系,扩展性好
- 偏好数据:用户经常访问和使用的数据
- 运行机制:
- (1)借助DatabaseHelper API,应用可以将指定文件的内容加载到Preferences实例(每个文件最多只有一个Preferences实例)
- (2)借助Preferences API,从Preferences实 例中读取数据或者将数据写入Preferences实例,通过flush或者flushSync将Preferences 实例持久化
- 开发步骤:
- (1)引入依赖包
- (2)进行数据初始化
- (3)初始化应用背景色(同步、异步)
- (4)存储背景色(putSync(key,value)函数)
- (5)清除背景色
(六)分布式数据库服务
- 分布式数据库服务:
- 通过结合帐号、应用和数据库三元组,分布式数据服务对属于不同的应用的数据进行隔离
- 在通过可信认证的设备间,分布式数据服务支持应用数据相互同步
- KV数据模型:是 一种NoSQL类型数据库,其数据以键值对的形式进行组织、索引和存储
- KV数据模型适合不涉及过多数据关系和业务关系的业务数据存储,比SQL数据库存储拥 有更好的读写性能
- 降低了数据库版本兼容和数据同步过程中冲 突解决的复杂度
- 分布式数据库ACID特性:
- 分布式数据库事务性(一次本地 事务的修改要么都同步成功,要么都同步失败)
- 分布式数据库一致性(强一致性、 弱一致性、最终一致性)
- 运行机制(五个部分):
- (1) 服务接口
- (2)服务组件
- (3)存储组件
- (4)同步组件
- (5)通信适配层
- 分布式数据服务架构:
- (1)应用程序通过调用分布式数据服务接口实现分布式数据库创建、访问、订阅功能
- (2)服 接口通过操作服务组件提供的能力,将数据存储至存储组件
- (3)存储组件调用同步组件实 现将数据同步,同步组件使用通信适配层将数据同步至远端设备
- (4)远端设备通过同步组 件接收数据,并更新至本端存储组件,通过服务接口提供给应用程序使用
- 开发步骤:
- (1)在config.json中添加permisssion权限
- (2)创建分布式数据库管理器实例
- (3)获取/创建单版本分布式数据库
- (4)订阅分布式数据库变化
- (5)将数据写入单版本分布式数据库
- (6)同步数据到其他设备
(七)分布式文件服务
- 分布式文件服务:为用户设备中的应用程序提供多设备之间的文件共享能力,支持相 同帐号下同一应用文件的跨设备访问
- 分布式文件:分布式文件是指依赖于分布式文件系统,分散存储在多个用户设备上的文 件,应用间的分布式文件目录互相隔离,不同应用的文件不能互相访问
- 运行机制:
(八)测一测
1.√
2.√
3.√
4.文件、关系型数据库、对线关系型数据库、用户偏好文件
5.×
6.√
7.√
8.√
八、HarmonyOS流转架构解析
(一)核心概念
- 跨端迁移:一种实现用户应用程序流转的技术方案,指在A端运行的FA迁移到B端上,完 成迁移后, B端FA继续任务,而A端应用退出
- 多端协同:一种实现用户应用程序流转的技术方案,指多端上的不同FA/PA同时运行、 或者交替运行实现完整的业务;或者,多端上的相同FA/PA同时运行实现完整的业务
- 流转架构:在底层实现Ability(分布式操作的基本组件)跨设备的启动/关闭、连接及断开 连接以及迁移等能力,实现跨设备的组件管理
- Ability的调度:启动和关闭、连接和断开连接、迁移能力
(二)流转架构
- 流转架构的优势:
- (1)统一流转管理UI,支持设备发现、选择以及任务管理
- (2)支持远程服务调用等能力,可轻松设计业务
- (3)支持多个应用同时进行流转
- (4)支持不同形态设备,如手机、平板、TV、手表等
- 流转核心模块:
- 流转任务管理服务
- 分布式任务调度
- 分布式安全
- 分布式软总线
- 跨端迁移关键流程:
- (1)流转准备:设备A上的应用向流转任务管理服务注册一个流转回调
- (2)流转开始:设备A上的应用通过调用分布式任务调度的能力,实现应用迁移
- (2.1)确认当前FA是否可以开始迁移(的onStartContinuation()方法)
- (2.2)便保存迁移后恢复状态必须的数据(onSaveData()方法)
- (2.3)传递设备A上FA 保存的数据(onRestoreData()方法)
- (2.4)通知应用迁移成功(onCompleteContinuation()方法)
- 多端协同步骤:
- (1)流转准备:设备A上的应用向流转任务管理服务注册一个流转回调
- (2)流转进行:设备A上的应用通过调用分布式任务调度的能力。向设备B的应用发起多端协同。流转中将流转状态上报到流转任务管理服务。
- (3)流转结束:用户通过设备A的流转任务管理界面结束流转。
(三)FA迁移过程
- 分布式任务调度的六种能力:
- 启动远程FA(startAbility(Intent intent)接口)
- 启动远程PA(startAbility(Intent intent)接口)
- 关闭远程PA
- 连接远程PA(connectAbility(Intent intent, IAbilityConnection conn)接口)
- 断开连接远程PA
- FA跨设备迁移(continueAbility()接口)
(四)跨端迁移功能开发
- 主要步骤:
- (1)设备A上的Page请求迁移
- (2)HarmonyOS处理迁移任务,并回调设备A上Page的保存数据方法,用于保存迁移必须的数据
- (3)HarmonyOS在设备B上启动同一个Page,并回调其恢复数据方法
(五)多端协同功能开发
- 场景与例子:手机充当电视机遥控器
(六)测一测
1.√
2.流转任务管理服务、分布式任务调度、分布式安全、分布式软总线
3.√
4.√
5.√
6.√
7.standard、singleton
8.√
九、HarmonyOS传感器和媒体管理
(一)普通传感器分类
- 根据传感器的用途,可以将传感器分为六大类:
- 运动类传感器(加速度、重力、陀螺仪、计步器)
- 环境类传感器
- 方向类 传感器
- 光线类传感器
- 健康类传感器
- 其他类传感器(如霍尔传感器)
(二)工作原理
- HarmonyOSOpenHarmony传感器包含如下四个模块:
- (1)Sensor API(基础API)
- (2)Sensor Framework(实现与SensorService的通信)
- (3)Sensor Service(层数据接收、解析、分发,前后台的策略管控,对设备Sensor的管理;Sensor权限管控)
- (4)HD_IDL层(对不同的FIFO、频率进行策略选择及不同设备适配)
(三)普通传感器调用
- 普通传感器调用步骤:
- (1)获取待订阅数据的传感器
- (2)创建传感器回调
- (3)订阅传感器数据
- (4)接收并处理传感器数据
- (5)取消订阅传感器数据
(四)相机调用
- 相机:HarmonyOS相机模块支持相机业务的开发,开发者可以通过已开放的接口实现相 机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照、连拍和录像等。(一个页面仅支持一个camera组件,提供预览、拍照功能。)
- 相机静态能力
- 物理相机
- 逻辑相机
- 帧捕获
(五)GPS调用
- 当用户处于这些丰富的使用场景中时,系统的位置能力可以提供实时准确的位置数据。 对于开发者,设计基于位置体验的服务,也可以使应用的使用体验更贴近每个用户。
- 当应用在实现基于设备位置的功能时,如:驾车导航,记录运动轨迹等,可以调用该模 块的API接口,完成位置信息的获取
- 基本概念:位置能力用于确定用户设备在哪里,系统使用位置坐标标示设备的位置,并用多种定位 技术提供服务,如
GNSS定位
、基站定位
、WLAN/蓝牙定位
(基站定位、WLAN/蓝牙定 位后续统称“网络定位技术”)。通过这些定位技术,无论用户设备在室内或是户外, 都可以准确地确定设备位置- 坐标、GNSS定位、基站定位、WLAN/蓝牙定位
- 运作机制:
- 需要用户进行确认并主动开启位置开关。如
- 设备位置信息属于用户敏感数据,所以即使用户已经开启位置开关,应用在获取设备位 置前仍需向用户申请位置访问权限。
- 获取设备的位置信息:
- 开发者可以调用HarmonyOS位置相关接口,获取设备实时位置,或者最近的历史位置
- 对于位置敏感的应用业务,建议获取设备实时位置信息
- 开发步骤:
- (1)设置权限
- (2)要引入头文件system.geolocation’,获取位置管理对象 geolocation’
- (3)在页面初始化回调函数或自定义函数中调用该对象的方法getLocation来获取位置信息
(六)测一测
1.运动类传感器、环境类传感器、方向类传感器、光线类传感器
2.√
3.√
4.×
5.Sensor API、Sensor Framework、Sensor Service、HD_IDL层
6.camera
7.×
8.√
十、HarmonyOS原子化服务
(一)HarmonyOS原子化服务定义
- 原子化服务:是有独立入口的(用户可通过点击方式直接触发)、免安装的(无需显式安装,由系统程序框架后台安装后即 可使用)、可为用户提供一个或多个便捷服务的用户应用程序形态
- 原子化服务由1个或多个HAP包组成,1个HAP包对应1个FA或1个PA。每个FA或PA均可独立运行,完成1个特定功能;1个或多个功能(对应FA或PA)完成1个特定的便捷服务
- 原子化服务特性:
- 随处可及(服务发现、智能推荐)
- 服务直达(免安装、服务卡片)
- 跨设备(支持多端、 支持跨设备分享、支持跨端迁移和协同)
(二)原子化服务体验
- 原子化服务中心:用户提供统一的原子化服务查看、搜索、收藏和管理功能
- 原子化服务流转的触发方式有系统推荐流转和用户手动流转
- 原子化服务流转技术方案:
- (1)跨端迁移:指在A端运行的用户应用程序,迁移到B端上并从迁移时刻A端状态继续运行,然后 A端用户应用程序退出
- (2)多端协同:指多端上的不同FA/PA同时运行、或者接替运行实现完整的业务。或者多端上的相 同FA/PA同时运行实现完整的业务
- 原子化服务分享:通过分享的方式,将原子化服务分享到其它设备上,用户确认后可直接免安装启动服务
(三)原子化服务开发基础
1.开发总体要求
- 免安装的HAP包不能超过10MB
- 通过DevEco Studio工程向导创建原子化服务,Project Type字段选择“Service”
- 版本更新时要保持免安装属性
- HarmonyOS 2.0以上版本
2.服务卡片定义
- 服务卡片(以下简称“卡片”)是FA的一种界面展示形式,将FA的重要信息或操作前置 到卡片,以达到服务直达,减少体验层级的目的
- 服务卡片包含三方:
- 卡片提供方
- 卡片使用方
- 卡片管理服务
3.运作机制
4.卡片提供方主要回调
5.JS卡片语法基础
- 数据绑定、事件绑定
(四)原子化服务进阶
1.卡片结构目录
2.卡片资源访问
- 卡片中的资源访问分为三类:JS模块资源,应用资源和系统资源。
- 应用资源引用(css文件中,通过“@app.type.resource_id”;在hml和json文件中,通过“{{$r(‘app.type.resource_id’)}}”)
- 系统资源(通过“@sys.type.resource_id”)
3.卡片配置文件
4.卡片实战
- 主要步骤:
- (1)新建卡片
- (2)卡片内容刷新(
updateForm(updateFormId, new FormBindingData(zsonObject))
) - (3)卡片页面跳转
- (4)卡片消息传递
- (5)卡片事件触发
(五)原子化服务分享
- 原子化服务所提供的便捷服务,可以通过接入华为分享实现近距离快速分享,使便捷服务可以精准快速的推送至接收方,降低用户触达服务的成本,提升用户体验
- 一般是服务端使用ServiceStub接口,客户端使用CallbackProxy接口,即“代理-桩”模 式
- 开发步骤:
- (1)集成IDL接口,用于建立分享方与华为分享的交互通道,完成后续服务分享过程
- (2)在java目录的应用包下创建ShareFaManager类,用于管理分享方与华为分享的连接通道 和数据交互
- (3)封装服务分享数据,调用ShareFaManager封装的接口完成服务的分享
(六)测一测
1.√
2.卡片提供方、卡片使用方、卡片管理服务
3.√
4.router事件、message事件
5.√
6.√
7.服务介绍信息、服务介绍图片、服务图标、服务名称
8.onTriggerFormEvent
十一、HarmonyOS网络与多线程
(一)Http接口调用
- 使用Http接口访问数据的步骤:
- (1)引入依赖(
import http from '@ohos.net.http';
) - (2)创建HttpRequest对象:该对象里面包括发起请求、中断请求、订阅/取消订阅Http Response Header 事件。每一个HttpRequest对象对应一个Http请求。如需发起多个Http 请求,须为每个Http请求创建对应HttpRequest对象(
let httpRequest = http.createHttp();
) - (3)设置请求报文参数HttpRequestOptions
- (4)发起http请求:根据URL地址和相关配置项,发起Http网络请求,使用callback方式作为 异步方法
- (5)返回结果HttpResponse:request方法回调函数的返回值类型
- (1)引入依赖(
报文参数
- RequestMethod(报头)
(二)数据上传和下载
- 任务操作步骤:
- (1)引入依赖(
import request from '@ohos.request';
) - (2)开启下载任务(
download(config: DownloadConfig, callback: AsyncCallback): void
) - (3)订阅下载进度(
on(type: 'progress', callback: (receivedSize: number, totalSize: number) => void): void;
)
- (1)引入依赖(
DownloadConfig
(三)WebSocket连接
- WebSocket是HTML5规范提出的一种协议,也是基于TCP协议的,和应用层Http协议是 并存的两种协议。HTML5 Web Sockets规范定义了Web Sockets API,支持页面使用 Web Socket协议与远程主机进行全双工的通信
- 操作步骤:
- (1)可以在JS中使用WebSocket建立服务器与客户端的双向连接,需要先通过 createWebSocket方法创建WebSocket对象
- (2)然后通过connect方法连接到服务器
- (3)当连接成功后,客户端会收到open事件的回调,之后客户端就可以通过send方法与服务器进 行通信。
- (4)当服务器发信息给客户端时,客户端会收到message事件的回调。当
- (5)客户端不要此连接时,可以通过调用close方法主动断开连接,之后客户端会收到close事件的回调
(四)多线程
- 进程是具有一定独立功能的程序在某个数据集合上的一次运行活动,进程是操作系统进 行资源分配和调度(CPU,内存和I/O)的一个独立单位。
- 线程是进程的一部分,是CPU 调度和分派的基本单位,一个进程可以拥有多个线程,它是比进程更小的能独立运行的 基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的CPU资源 (如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所 拥有的全部资源(除了CPU之外的其他资源,如内存和I/O)
- 线程的作用:在启动应用时,系统会为该应用创建一个称为**“主线程”**的执行线程。该线程随着应用 创建或消失,是应用的核心线程。UI界面的显示和更新等操作,都是在主线程上进行。 主线程又称UI线程,默认情况下,所有的操作都是在主线程上执行。如果需要执行比较 耗时的任务(如下载文件、查询数据库),可创建其他线程来处理
- 线程的实现:
TaskDispatcher
是一个任务分发器,它是Ability分发任务的基本接口,隐藏任务所在线 程的实现细节。TaskDispatcher具有多种实现,每种实现对应不同的任务分发器。- GlobalTaskDispatcher:全局并发任务分发器
- ParallelTaskDispatcher:并发任务分发器
- SerialTaskDispatcher:串行任务分发器
- SpecTaskDispatcher:专有任务分发器
- 进程调度方式:
- 同步派发syncDispatch
- 异步派发asyncDispatch
(五)测一测
1.×
2.√
3.√
4.GlobalTaskDispatcher、ParallelTaskDispatcher、SerialTaskDispatcher、SpecTaskDispatcher
5.×
6.√
7.√
8.√
学习楼主是如何记笔记的