---
marp: true
theme: default
header: HCIA-HarmonyOS Application Developer
paginate: true
---

# HCIA-HarmonyOS Application Developer
###### Huawei Certified ICT Associate-HarmonyOS Application Developer
###### 培训与认证具备华为HarmonyOS应用开发能力的工程师
---

# 关于考试
---

### 考试名称:HCIA-HarmonyOS Application Developer V1.0
### 考试代码:H14-211
### 考试语言:中文
### 试题类型:判断题、单选题、多选题、填空题、拖拽题
### 考试费用:200USD
### 考试时长:90分钟
### 通过分数/总分:600/1000
---

# 考试内容
---

### HarmonyOS基础(15%):基本概念、架构与安全、关键特性、技术生态
### 应用开发入门(9%):开发流程、开发基础
### Ability设计与开发(18%):Feature Ability及页面跳转、Particle Ability、Intent、分布式任务调度、公共事件与通知、服务卡片、剪贴板
### UI页面设计与开发(31%):Java UI框架、JS UI框架、UI设计、多模输入
### 线程管理与数据管理(13%):线程、文件、数据库
### 其它功能(10%):网络、日志、多媒体、安全、AI、设备管理
### 功能调测与发布(4%)
---

# 获取证书
---


---

# 真题详解(一)
---

### 1. 分布式软总线中的总线中枢实现了对设备互联互通的管理,以下哪一项不属于总线中枢的互联管理中心?
__A)__ 连接
__B)__ 组网和拓扑管理决策
__C)__ 安全
__D)__ 发现
### 答案:C
---

### 题解

###### 安全组件虽然是总线中枢的一部分,但并不属于互联管理中心
---

### 2. 在直播场景中,主播用运动相机采集视频作为直播镜头,相机的分布式使用体现了HarmonyOS的分布式________能力。
### 答案:设备虚拟化
---

### 题解
###### 基于分布式设备虚拟化,可以实现不同设备的资源融合、设
备管理和数据处理,将多台设备共同组成一个超级虚拟终端
---

### 3. 在HarmonyOS系统架构中,以下哪些选项属于内核层?
__A)__ LiteOS
__B)__ HDF (Hardware Driver Foundation)
__C)__ Linux
__D)__ KAL (Kernel Abstract Layer)
### 答案:ABCD
---

### 题解

###### HarmonyOS的内核层由KAL(内核抽象层)、内核子系统(Linux Kernel、
LiteOS等)和驱动子系统(HDF(硬件驱动框架))三部分组成
---

### 4. 在协同办公场景中,将手机上的文档投屏到智慧屏,在智慧屏上对文档执行翻页、缩放、涂鸦等操作,文档的最新状态可以在手机上同步显示。该场景中的涂鸦功能主要是用到了HarmonyOS应用数据管理的分布式________服务。
### 答案:文件
---

### 题解

###### 借助分布式文件服务可在多台设备间分享文件
---

### 5. 某用户在视频通话时,想要将手机视频迁移到智慧屏上播放,在点击迁移的时候,发现智慧屏已经在可选列表中,关于该场景的描述中,正确的是哪几项?
__A)__ 体现了分布式软总线极速传输的特点
__B)__ 手机和智慧屏可以是不同的华为账号
__C)__ 需要手机和智慧屏在同一局域网内
__D)__ 体现了分布式软总线的自发现功能
### 答案:CD
---

### 题解

###### 同网同账号,自发现&连接
---

### 6. 导航场景中,如果用户驾车出行前,在手机上规划好导航路线,上车后,车机接续进行导航。该场景中导航在手机和车机之间的业务接续主要是用到了HarmonyOS的分布式________调度功能。
### 答案:任务
---

### 题解

###### 分布式任务调度支持对跨设备应用的远程启动、远程调用、远程连接以及迁移等操作
---

### 7. 在HarmonyOS的子系统中,以下哪些子系统属于增强软件服务子系统集?
__A)__ 位置服务子系统
__B)__ 智慧屏专有业务子系统
__C)__ 多媒体子系统
__D)__ 穿戴专有业务子系统
### 答案:BD
---

### 题解

###### 位置服务子系统和多媒体子系统分别属于硬件服务子系统集和基础软件服务子系
统集,智慧屏专有业务子系统和穿戴专有业务子系统属于增强软件服务子系统集
---

### 8. HarmonyOS数据生命周期包括以下哪些过程?
__A)__ 数据传输
__B)__ 数据存储
__C)__ 数据使用
__D)__ 数据生成
### 答案:ABCD
---

### 题解

###### HarmonyOS围绕数据的生成、存储、使用、传输和销毁,提供全生命周期
的安全保护,确保个人信息及隐私、系统机密数据如密钥等,不发生泄露
---

### 9. 下图中的模块:

---

### 哪些可以独立安装运行?
__A)__ Entry.hap
__B)__ FeatureC.hap
__C)__ FeatureA.hap
__D)__ FeatureB.hap
### 答案:AC
---

### 题解
- HarmonyOS上的应用由一到多个HAP(HarmonyOS Ability Package)组成
- HAP分为两种类型:
- entry:入口包,一个入口包适配一种设备
- feature:特征包,特征包的数量没有限制
- HAP包含如下内容:
- abilities:界面或服务
- libs:库
- resources:资源
- config.json:包配置
- 能够独立安装运行的HAP必须包含界面或服务,即abilities
---

### 10. 某开发者在安装HAP(HarmonyOS Ability Package)时,提示“STRINLETH_ERROR”,可能存在的原因是什么?
__A)__ config.json中配置的设备类型与调试设备类型不匹配
__B)__ 包信息超过最大长度
__C)__ 未配置签名信息
__D)__ 编译构建插件的版本与Gradle的版本不匹配
### 答案:B
---

### 题解
###### config.json由app、deviceConfig和module三个对象组成,其中app对象包含应
用的全局配置信息。app对象的bundleName属性表示应用的包名,也是应用的
唯一标识。合法的包名是以字母开头,由7~127个字母、数字、下划线(“_”)和
点号(“.”)组成的字符串,通常采用反域名形式表示,如:com.huawei.myapp
---

### 11. 开发者使用的第三方库若涉及权限管理,则需要在应用的config.json文件中逐个进行权限声明。
### 答案:正确
---

### 题解
- 应用需要在config.json中,通过module对象的reqPermissions属性,对所需要的权限逐个进行声明
- 若所用第三方库也涉及到权限使用,统一在应用的config.json中逐个声明
- 没有在config.json中显式声明的权限,应用无法获得授权
- 对于部分敏感权限,应用在运行时调用动态申权接口,系统弹框,向用户征询授权
---

### 12. 某用户驾车出行前,在手机上规划了导航路线,上车后,该用户将手机导航迁移到车机大屏上。在该场景中,通过哪个接口实现了跨设备迁移的功能?
__A)__ IAbilityConnection
__B)__ AbilityContinuation
__C)__ AbilityConnection
__D)__ IAbilityContinuation
### 答案:D
---

### 题解

###### 可被迁移FA的Ability和AbilitySlice需要实现IAbilityContinuation接口。源设备上的
应用在onSaveData()中将数据放入Intent。目标设备上的应用在onRestoreData()
中从Intent获取数据。源设备上的应用在onCompleteContinuation()中退出运行
---

### 13. 开发者在安装HarmonyOS应用开发环境时,如果不能直接访问Internet,则需要设置Gradle和NPM代理才能正确配置开发环境。
### 答案:正确
---

### 题解
- 在Settings>Appearance & Behavior>System Settings>HTTP Proxy中设置HTTP代理

---

### 题解
- 在<用户目录>/.gradle/gradle.properties文件中设置Gradle代理
```properties
systemProp.http.proxyHost=proxy.server.com
systemProp.http.proxyPort=8080
systemProp.http.nonProxyHosts=*.company.com|10.*|100.*
systemProp.http.proxyUser=userId
systemProp.http.proxyPassword=password
systemProp.https.proxyHost=proxy.server.com
systemProp.https.proxyPort=8080
systemProp.https.nonProxyHosts=*.company.com|10.*|100.*
systemProp.https.proxyUser=userId
systemProp.https.proxyPassword=password
```
---

### 题解
- 在<用户目录>/.npmrc文件中设置NPM代理
```properties
registry=https://repo.huaweicloud.com/repository/npm/
proxy=http://user:password@proxy.server.com:80
https-proxy=http://user:password@proxy.server.com:80
```
---

### 14. 某开发者计划开发一款带有UI界面的应用,该开发者将执行哪些开发步骤?
__A)__ 创建工程
__B)__ 设计界面
__C)__ 运行程序
__D)__ 实现功能
### 答案:ABCD
---

### 题解

###### 开发完成以后,可将构建好的应用打包发布到本地模
拟器、本地设备、远程摸仪器或远程设备上运行调测
---

### 15. 开发者在启动远程服务时通过Intent指定音乐播放服务,即可实现设备A(本地设备)启动设备B(远程设备)音乐播放的能力。这个场景体现了分布式任务调度的哪个能力?
__A)__ 启动远程PA(Particle Ability)
__B)__ 启动远程FA(Feature Ability)
__C)__ 关闭远程PA(Particle Ability)
__D)__ 连接远程PA(Particle Ability)
### 答案:AC
---

### 题解

###### 应用调用本地或远程PA(Particle Ability)即Service,包括两种模式:启动——停止模式
和连接——断开模式。前者适用于不需要与Service交互的场合,而后者则适用于交互场合
---

### 16. 某开发者在开发HarmonyOS应用时,通过Intent传递对象。下列关于Intent描述正确的是哪几项?
__A)__ 指定BundleName与AbilityName实现跳转,根据Ability的全称来直接启动应用
__B)__ 处理一个应用程序整体性的工作
__C)__ 是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行, 而不会因为切换页面而消失
__D)__ 未指定BundleName与AbilityName实现跳转,根据Operation中的其它属性来启动应用
### 答案:AD
---

### 题解
- Intent是对象间传递信息的载体
- 当一个Ability需要启动另一个Ability,或一个AbilitySlice需要导航到另一个AbilitySlice时,可以通过Intent指定目标并携带参数
- Intent借助于Operation指定目标
- Intent借助于Parameters携带参数
---

### 题解
- 如果同时指定了BundleName和AbilityName,则根据Ability的全称启动目标应用
```java
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.demoapp")
.withAbilityName("com.demoapp.FooAbility")
.build();
intent.setOperation(operation);
startAbility(intent);
```
---

### 题解
- 若未指定BundleName和AbilityName,则根据Operation的其它属性启动目标应用
```java
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withAction(Intent.ACTION_QUERY_WEATHER)
.build();
intent.setOperation(operation);
startAbilityForResult(intent, REQ_CODE_QUERY_WEATHER);
...
@Override
protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
if (requestCode == REQ_CODE_QUERY_WEATHER) {
...
}
}
```
---

### 17. 系统首次创建Page实例时,会调用以下哪个方法?
__A)__ onInActive()
__B)__ onActive()
__C)__ onStart()
__D)__ onForeground()
### 答案:C
---

### 题解

###### 当系统首次创建Page实例时,会触发onStart()回调方法。该方法在Page的整个生命
周期里仅被执行一次。开发者必须重写该方法,并在此配置默认展示的AbilitySlice
---

### 18. TextField提供了一种文本输入框,所有XML属性全部继承自Text。
### 答案:错误
---

### 题解

###### TextField的大部分属性均继承自Text,但用于表示输入框基线的basement属性却为其所独有。
```xml
```
---

### 19. 在进行HarmonyOS应用开发时,设备A上的FA(Feature Ability)迁移到设备B之后,如果想要迁回,则在迁移时需要调用哪个方法?
__A)__ continueAbilityReversibly()
__B)__ continueAbility()
__C)__ startAbility()
__D)__ startAbilityForResult(
### 答案:A
---

### 题解
- 实现了IAbilityContinuation接口的Page可以在其生命周期内,调用continueAbility()或continueAbilityReversibly()方法请求迁移
- 两者的区别在于,通过continueAbilityReversibly()方法发起的迁移可在日后回迁
- 回迁的方法是在迁移源设备上调用reverseContinueAbility()方法
---

### 20. 开发者在使用ScrollView控件时,想使垂直滚动布局生效,与布局相对应的控件宽度应该如何设置?
__A)__ match_parent
__B)__ match_child
__C)__ match_content
__D)__ 固定宽度值
### 答案:AD
---

### 题解
- 垂直滚动的ScrollView,其水平尺度必须是确定的,不能依赖于内容或子组件
```xml
```
---

### 21. 某开发者在智慧屏上开发JavaScript应用时,想做一些静态动画,如果要将某个组件沿水平方向移动200px,以下哪项样式配置是正确的?
__A)__ `transform: scaleX(200px);`
__B)__ `transform: rotateX(200px);`
__C)__ `transform: rotateY(200px);`
__D)__ `transform: translate(200px);`
### 答案:D
---

### 题解
- 静态动画的核心是transform样式,包括三种动画类型
- translate:沿水平或垂直方向平移
- rotate:围绕横轴、纵轴或中心旋转
- scale:沿水平或垂直方向缩放
---

### 题解
- HML
```xml
hello
hello
hello
```
---

### 题解
- CSS
```css
.translate {
...
transform: translate(200px);
}
.rotate {
...
transform-origin: 200px 100px;
transform: rotateX(45deg);
}
.scale {
...
transform: scaleX(1.5);
}
```
---

### 22. 如果需要使用—个组合动画,可以把多个动画对象进行组台,并添加到AnimatorGroup中。AnimatorGroup提供了两个方法,runSerially()和runParallel(),分别表示顺序播放动画和同时播放动画。
### 答案:正确
---

### 题解
```java
// 创建动画组
AnimatorGroup animatorGroup = new AnimatorGroup();
// 顺序播放四个动画
animatorGroup.runSerially(am1, am2, am3, am4);
// 同时播放四个动画
animatorGroup.runParallel(am1, am2, am3, am4);
// 启动动画
animatorGroup.start();
```
---

### 23. 系统销毁Page时,会触发下列哪个回调方法?
__A)__ onForeground()
__B)__ onActive()
__C)__ onStart()
__D)__ onStop()
### 答案:D
---

### 题解

###### 当系统即将销毁Page实例时,会触发onStop()回调方法,通知应用释放所持有的资源
---

### 24. 某开发者在开发一款软件时,用到了StackLayout布局。添加到这个布局中的组件以层叠方式显示,默认位于区域的左上角。第一个添加到布局中的组件显示在最顶层,最后一个被放在最底层。
### 答案:错误
---

### 题解

###### StackLayout(栈布局)中的组件,越先添加的越靠近底层,越后添
加的越靠近顶层,最先添加的位于最底层,最后添加的位于最顶层
---

### 25. 开发者在使用Java UI框架时,会用到各种组件来创建一个页面。以下哪些XML属性,是所有组件通用的?
__A)__ theme
__B)__ width
__C)__ clickable
__D)__ id
### 答案:BD
---

### 题解
- Java UI框架中的每种组件都有各自的XML属性列表
- 存在继承关系的组件,子类组件继承父类组件的全部属性
- Component作为所有组件的基类,拥有各类组件的公共属性,如ID、布局参数等
```xml
<...
ohos:id="$+id:text"
ohos:width="20vp"
ohos:height="10vp"
...
/>
```
---

### 26. 如下代码段用来启动远程设备的Service,如欲换成启动本地设备的Service,可以删除“`.withDeviceId("deviceId")`”。
```java
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId("deviceId")
.withBundleName("com.huawei.himusic")
.withAbilityName("com.huawei.himusic.ServiceAbility")
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
.build();
intent.setOperation(operation);
```
### 答案:错误
---

### 题解
- 启动Service,需要在Intent的Operation中指定设备标识、应用包名和Ability名称
- 对于本地设备的Service,设备标识使用空字符串表示
```java
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.huawei.himusic")
.withAbilityName("com.huawei.himusic.ServiceAbility")
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
.build();
intent.setOperation(operation);
```
---

### 27. 某开发者在开发一款智能家居应用时,会用到Switch组件来表示某些设备的开关。开启状态组件上显示ON,关闭状态组件上显示OFF。以下哪些选项能满足此需求?
__A)__ `btnSwitch.setStateOffText("ON");`
__B)__ ``
__C)__ `btnSwitch.setStateOffText("OFF");`
__D)__ ``
### 答案:BC
---

### 题解
- 在XML中设置Switch组件的文本属性
```xml
```
- 在Java中设置Switch组件的文本属性
```java
Switch btnSwitch = (Switch) findComponentById(ResourceTable.Id_btnSwitch);
btnSwitch.setStateOnText("ON");
btnSwitch.setStateOffText("OFF");
...
```
---

### 28. 某开发者开发一款应用时需要访问数据库,其中uri为目标路径,columns为想要查询的字段。该开发者通过DataAbilityPredicates构建了查询条件,查询userId在101~103之间的用户,并把结果打印出来。请补全代码。
```java
DataAbilityHelper helper = DataAbilityHelper.creator(this);
// 构造查询条件
DataAbilityPredicates predicates = new DataAbilityPredicates();
predicates.between("userId", 101, 103);
// 执行查询
ResultSet resultSet = helper.query(________, ________, predicates);
// 处理结果集
resultSet.goToFirstRow();
do {
// 打印结果记录
...
} while (resultSet.goToNextRow());
```
### 答案:`uri`,`columns`
---

### 题解
- 在基于DataAbility的跨应用远程数据库访问中,数据需求者可以借助于DataAbilityHelper,实现针对远程库表的增、删、改、查、批处理等操作
```java
// 查询数据库
ResultSet query(
Uri uri, // 目标资源路径
String[] columns, // 期望查询字段
DataAbilityPredicates predicates // 查询条件谓词
);
```
---

### 29. 开发者可以通过下列哪些做法获得当前设备上8vp的实际像素数?
__A)__
```java
AttrHelper.convertDimensionToPix(getContext(), "8vp", 0);
```
__B)__
```java
AttrHelper.vp2px(8, getContext());
```
---

__C)__
```java
AttrHelper.convertDimensionToPix(getContext(), "8", 0);
```
__D)__
```java
(int)(DisplayManager.getInstance().getDefaultDisplay(
getContext()).get().getRealAttributes().scalDensity * 8 + .5f);
```
### 答案:AB
---

### 题解
- AttrHelper类提供了一组用于尺寸单位换算的静态方法:
```java
// 任意单位尺寸换算为像素数
int convertDimensionToPix(
Context context, // 应用上下文
String value, // 尺寸字符串
int defaultValue // 换算缺省值
);
```
```java
// 将虚拟像素数换算为像素数
int vp2px(
float value, // 虚拟像素数
Context context // 应用上下文
);
```
---

### 30. 某开发者在开发—款机票预订应用时,在机票的日期选择上,使用了滑动选择器DatePicker并编写了如下代码。以下关于该代码段描述正确的有哪几项?
```xml
```
__A)__ 月份固定
__B)__ 宽度300vp
__C)__ 选中文本大小16fp
__D)__ 高度匹配内容
### 答案:BCD
---

### 题解

---

### 31. 某开发者正在开发一款应用,其中有个功能是通过上下左右滑动当前视图来显示其它视图,如删除、收藏、搜索等。最适合实现该场景的布局是哪一项?
__A)__ StackLayout
__B)__ TableLayout
__C)__ DependentLayout
__D)__ DirectionalLayout
### 答案:A
---

### 题解
###### 栈布局(StackLayout)可将多个图层按照自底(远离观察者)向
顶(接近观察者)的方向依次叠压的屏幕上。通过对滑动事件的
处理,控制显示某个图层,而隐藏其它图层,即可实现如题需求
---

### 32. 某开发者想要在应用中实现页面滑动效果。他应该选择以下哪个组件?
__A)__ WebView
__B)__ PageSlider
__C)__ ProgressBar
__D)__ ToastDialog
### 答案:B
---

### 题解

---

### 33. 某开发者创建了一个Image组件,将组件中图片的透明度设置为0.5,透明度的属性为alpha,请在横线处将代码补充完整。
```xml
```
### 答案:`ohos:alpha="0.5"`
---

### 题解

---

### 34. 某开发者使用ListContainer创建了一个可以滑动的列表组件,希望在滑动到列表开始和结尾时显示回弹效果。以下哪些选项可以满足该需求?
__A)__ ``
__B)__ `listContainer.setReboundEffect(true);`
__C)__ `listContainer.setReboundEffect(false);`
__D)__ ``
### 答案:BD
---

### 题解
###### ListContainer组件通过将rebound_effect属性设为true或false开启或关闭回弹效果
---

### 35. 某开发者要实现一个注册登录功能。现有两个页面,分别是注册页面A和登录页面B。当从注册页面A跳转到登录页面B时,关于两个页面的生命周期,以下描述正确的是哪—项?
__A)__ B(INITIAL)→B(ACTIVE)→A(INACTIVE)→A(BACKGROUND)
__B)__ A(INACTIVE)→B(INITIAL)→B(ACTIVE)→A(BACKGROUND)
__C)__ A(INACTIVE)→A(BACKGROUND)→B(INITIAL)→B(ACTIVE)
__D)__ A(INACTIVE)→B(INITIAL)→A(BACKGROUND)→B(ACTIVE)
### 答案:C
---

### 题解

###### 跳转过程中,注册页面A经过非激活态进入后台态,注册页面B由初始态进入激活态
---

### 36. 下列哪几项属于Page Ability的生命周期回调方法?
__A)__ onCreate()
__B)__ onStart()
__C)__ onActive()
__D)__ onForeground()
### 答案:BCD
---

### 题解

###### Page Ability的生命周期
---

### 37. 某开发者在设计JavaScript登录页面时,需要以Internal Ability的方式调用Data Ability,验证用户名和密码:
```js
const ABILITY_TYPE_EXTERNAL = 0;
const ABILITY_TYPE_INTERNAL = 0;
var action = 0;
action.bundleName ='com.huawei.loginservice';
action.abilityName ='com.huawei.loginservice.LoginDataAbility';
action.messageCode = ACTION_MESSAGE_CODE_PLUS;
action.data = actionData;
action.abilityType = ABILITY_TYPE_EXTERNAL;
action.syncOption = ACTION_SYNC;
var result = await FeatureAbility.callAbility(action);
```
---

### 修改以下哪几项可以实现该功能?
__A)__ `const ABILITY_TYPE_EXTERNAL = 2;`
__B)__ `const ABILITY_TYPE_INTERNAL = 1;`
__C)__ `action.abilityType = ABILITY_TYPE_INTERNAL;`
__D)__ `action.abilityType = ABILITY_TYPE;`
### 答案:BC
---

### 题解
- 在FA中调用PA,存在Ability和Internal Ability两种方式:
PA|Ability|Internal Ability
:-:|:-:|:-:
继承自|ohos.aafwk.ability.Ability|ohos.ace.ability.AceInternalAbility
在FA中注册|不需要|需要
在config.json中声明|需要|不需要
生命周期|独立于FA|与FA共享
被其它FA调用|允许|不允许
abilityType(JS)|0|1
---

### 38. Ability和Internal Ability是FA(Feature Ability)调用PA(Particle Ability)的两种不同方式。下列关于这两种方式描述正确的是哪几项?
__A)__ Ability不需要在FA中注册
__B)__ Ability有独立的生命周期
__C)__ Internal Ability允许被其它FA调用
__D)__ Ability继承自ohos.aafwk.ability.Ability
### 答案:ABD
---

### 题解
- 在FA中调用PA,存在Ability和Internal Ability两种方式:
PA|Ability|Internal Ability
:-:|:-:|:-:
继承自|ohos.aafwk.ability.Ability|ohos.ace.ability.AceInternalAbility
在FA中注册|不需要|需要
在config.json中声明|需要|不需要
生命周期|独立于FA|与FA共享
被其它FA调用|允许|不允许
abilityType(JS)|0|1
---

### 39. 某开发者自定义了响应点击事件的方法,并创建了一个Component.ClickedListener对象。通过调用什么方法可将其分配给按钮?
```java
Button button = (Button)findComponentById(ResourceTable.Id_button);
// 为按钮设置点击事件回调
button.________(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
// 此处添加按钮点击事件处理
}
});
```
### 答案:`setClickedListener`
---

### 题解
- Component类的setClickedListener()方法用于为调用组件设置点击事件侦听器
```java
void setClickedListener(Component.ClickedListener listener);
```
- 在Component.ClickedListener的子类中覆盖onClick()方法,处理点击事件
```java
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) { /* 此处添加按钮点击事件处理 */ }
});
```
- 也可以采用Lambda表达式的形式,处理点击事件
```java
button.setClickedListener(component -> { /* 此处添加按钮点击事件处理 */ });
```
---

### 40. 某个HarmonyOS应用的MainAbility拥有多个AbilitySlice。当在AbilitySlice之间切换时,MainAbility的状态是INACTIVE。
### 答案:错误
---

### 题解

###### 一个PageAbility由一到多个AbilitySlice组成。一个AbilitySlice代表一个页面。在
一个PageAbility的多个AbilitySlice之间切换,该PageAbility始终保持ACTIVE状态
---

### 41. 某开发者开发一款后台音乐播放软件时,需要使用到Service Ability。下列关于Service Ability的使用过程描述正确的有哪几项?
__A)__ 通过connectAbility()方法连接Service时,需要传入目标Service的Intent
__B)__ 通过Intent的setElement()方法设置目标服务信息
__C)__ 在应用清单文件中对Ability进行注册
__D)__ 在onConnect()回调方法中返回一个IRemoteObject对象
### 答案:AD
---

### 题解
- 客户机和服务器共用的远程对象类
```java
public class RemoteObject extends LocalRemoteObject {
...
}
```
- 服务器在Ability的onConnect()回调方法中返回远程对象
```java
public class ServiceAbility extends Ability {
...
@Override
public IRemoteObject onConnect(Intent intent) {
return new RemoteObject();
}
}
```
---

### 题解
- 客户机创建连接对象
```java
IAbilityConnection connection = new IAbilityConnection() {
@Override
public void onAbilityConnectDone(ElementName elementName,
IRemoteObject iRemoteObject, int i) {
RemoteObject object = (RemoteObject) iRemoteObject;
...
}
@Override
public void onAbilityDisconnectDone(
ElementName elementName, int i) {
...
}
};
```
---

### 题解
- 客户机发起服务连接
```java
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId("deviceId")
.withBundleName("com.huawei.himusic")
.withAbilityName("com.huawei.himusic.ServiceAbility")
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
.build();
intent.setOperation(operation);
connectAbility(intent, connection);
```
---

### 42. Ability A可以通过startAbility()方法打开Ability B的默认AbilitySlice。如果要打开Ability B的其它AbilitySlice,可以通过________()方法在Ability B的onStart()方法中为此AbilitySlice配置路由。
### 答案:setMainRoute
---

### 题解

###### 虽然一个PageAbility可以包含多个AbilitySlice,但是当PageAbility进入前台时屏幕上只
显示一个AbilitySlice。默认显示的AbilitySlice是通过setMainRoute()方法指定的。如果
需要更改默认显示的AbilitySlice,可以通过addActionRoute()方法为该AbilitySlice配置
一条路由规则。addActionRoute()方法中使用的动作名,需要在config.json文件中注册
---

### 43. 某开发者想在数据库中插入一条用户信息,其中uri为目标资源路径,ValuesBucket为要增加的对象。请在横线处填写代码:
```java
DataAbilityHelper helper = DataAbilityHelper.creator(this);
// 构造插入数据
ValuesBucket values = new ValuesBucket();
values.putString("name", "Tom");
values.putInteger("age", 12);
helper.________(uri, ________);
```
### 答案:`insert`,`values`
---

### 题解
- 在基于DataAbility的跨应用远程数据库访问中,数据需求者可以借助于DataAbilityHelper,实现针对远程库表的增、删、改、查、批处理等操作
```java
// 插入数据库
int insert(
Uri uri, // 目标资源路径
ValuesBucket values // 待插入记录
) throws DataAbilityRemoteException;
```
---

### 44. 某开发者在开发一款机票预订应用时,在机票的日期选择上需要用到滑动选择器DatePicker,其颜色值为#00CED1。以下可以满足该需求的选项有哪些?
__A)__ `datePicker.setSelectTextColor(new Color(Color.getIntColor("#00CED1")));`
__B)__ `datePicker.setShaderColor(new Color(Color.getIntColor("#00CED1")));`
__C)__ `ohos:shader_color="#00CED1"`
__D)__ `ohos:selected_text_color="#00CED1"`
### 答案:BC
---

### 题解

---

### 45. HiLog可以输出五种不同级别的日志,其中________级别的日志表示错误。
### 答案:ERROR
---

### 题解
- HiLog定义了五个日志等级,并提供了对应的方法以输出不同等级的日志:
等级|方法|描述
:-:|:-:|-
DEBUG|debug|调试信息:需要在设备的开发人员选项中打开USB调试开关
INFO|info|一般信息:一般意义的普通信息
WARN|warn|警告信息:不影响程序运行,但值得关注
ERROR|error|一般错误:进入错误处理流程,无法获得预期结果
FATAL|fatal|致命错误:不可恢复的严重错误,程序无法继续运行
- DevEco Studio集成开发环境的日志窗口,可根据日志等级进行过滤
---

### 46. 某开发者筛选出一条日志。分析该日志,不能得到以下哪些信息?
```
12-02 17:22:26.051 28454-28454/com.example.myapplication W 00201/MY_TAG: Failed to visit, reason:503.
```
__A)__ 警告日志
__B)__ 错误号
__C)__ URL
__D)__ 在HiLogLabel中定义的内容
### 答案:C
---

### 题解

---

### 47. 轻量级偏好数据库属于非关系型数据库,主要提供轻量级Key-Value操作,支持本地应用存储大量数据。若HarmonyOS开发者使用轻量级偏好数据库保存数据,则数据会被存储到本地文件而非内存中。
### 答案:错误
---

### 题解
###### 轻量级偏好数据库是轻量级存储,主要用于保存应用的常用配置,并不
适合存储大量的数据或频繁改变的数据。用户数据以文件的形式被持久
化到存储设备上。应用访问的数据库实例包含文件中的全部数据,并一
直驻留在设备内存中。应用程序借助特定的接口访问轻量级偏好数据库
---

### 48. 某开发者使用HarmonyOS实现了在手机上写了一半的邮件,点击流转按钮到平板继续编辑邮件的功能。该场景体现了分布式任务调度的哪个能力?
__A)__ 连接远程PA(Particle Ability)
__B)__ FA(Feature Ability)跨设备迁移
__C)__ 启动远程PA(Particle Ability)
__D)__ 关闭远程FA(Feature Ability)
### 答案:B
---

### 题解

###### 分布式任务调度支持对跨设备应用的远程启动、远程调用、远程连接以及迁移等操作
---

### 49. 某开发者有多个版本的对象关系映射数据库。该开发者调用BookStoreUpgrade类实现数据库版本升级时,BookStoreUpgrade类的版本号配置为“2”,而当前BookStore.db的实际版本号为“1”。在此情形下, TestOrmMigration23类的onMigrate()方法会被自动调用完成数据库升级。
### 答案:错误
---

### 题解
- 版本1的数据库
```java
@Database(entities = {User.class, Book.class}, version = 1)
public abstract class BookStore extends OrmDatabase {}
```
- 版本2的数据库,增加了一张表
```java
@Entity(tableName = "t_order")
public class Order extends OrmObject {
```
```java
@Database(entities = {User.class, Book.class, Order.class}, version = 2)
public abstract class BookStoreUpgrade extends OrmDatabase {}
```
---

### 题解
- 版本1到版本2的迁移类
```java
public class TestOrmMigration12 extends OrmMigration {
public TestOrmMigration12() { super(1, 2); }
@Override
public void onMigrate(RdbStore rdbStore) {
rdbStore.executeSql("CREATE TABLE IF NOT EXISTS `t_order` ...");
}
}
```
- 获取数据库上下文时,指定版本迁移类
```java
OrmContext ormContext = (new DatabaseHelper(contex)).getOrmContext(
"BookStoreDB", "BookStore.db", BookStoreUpgrade.class,
new TestOrmMigration12());
```
---

### 50. 工程师通过GET请求访问网络失败,提示“Attempt to invoke virtual method”。应该在config.json中配置以下哪个权限?
__A)__ harmonyos.permission.ANSWER
__B)__ harmonyos.permission.ACCESS_NETWORK_STATE
__C)__ harmonyos.permission.INTERNET
__D)__ harmonyos.permission.REQUEST
### 答案:C
---

### 题解
- 使用网络管理模块的相关功能时,需要请求相应的权限:
权限名|权限描述
-|-
ohos.permission.GET_NETWORK_INFO|获取网络连接状态
ohos.permission.SET_NETWORK_INFO|修改网络连接状态
ohos.permission.INTERNET|打开网络套接字,建立连接,访问网络
---

### 51. 某开发者正在编写一段代码来控制某Ability的访问权限。要求只有拥有“ohos.permission.CAMERA”权限的应用才能访问此Ability。该开发者在config.json中编写的相关代码如下:
```json
"abilities": [
{
"name": "com.huawei.hiworld.MainAbility",
"description": "$string:description_main_ability",
"icon": "$media:hiworld.png",
"label": "HiCamera",
"launchType": "standard",
"orientation": "portrait",
"visible": false,
________
}
]
```
---

### 该开发者需要在横线处补充下列哪—项?
__A)__ `"defPermissions": [{"name": "ohos.permission.CAMERA"}]`
__B)__ `"permissions": ["ohos.permission.CAMERA"]`
__C)__ `"reqPermissions": [{"name": "ohos.permission.CAMERA"}]`
__D)__ `"permissions": ["ohos.permission.LOCATION"]`
### 答案:B
---

### 题解
###### config.json文件中ability对象的permissions属性表示其它应用的Ability
访问此Ability时需要申请的权限。通常采用反向域名格式,取值既可以
是系统预定义的权限,也可以是开发者自定义的权限。如果是自定义权
限,其值必须与module对象defPermissions属性中定义的某个权限一致
---

### 52. 软件开发工程师在对视频编解码的过程中,需要检测是否读取到Buffer数据以及是否发生异常,可以使用以下哪种方法?
__A)__ ErrorCode()
__B)__ BufferListener()
__C)__ ErrorBuffer()
__D)__ ICodecListener()
### 答案:D
---

### 题解
- 在通过视频编解码器Codec对视频数据编解码的过程中,如果需要检测是否读取到Buffer数据以及是否发生异常,可以构造一个实现了ICodecListener接口的侦听器,并通过Codec的registerCodecListener()方法将其注册到编解码器中
- 侦听器需要实现ICodecListener接口的两个回调方法:
- onReadBuffer():读取到Buffer数据时被调用
- onError():发生异常时被调用
---

### 题解
```java
Codec.ICodecListener listener = new Codec.ICodecListener() {
@Override
public void onReadBuffer(ByteBuffer byteBuffer,
BufferInfo bufferInfo, int trackId) {
Format fmt = codec.getBufferFormat(byteBuffer);
...
}
@Override
public void onError(int errorCode, int act, int trackId) {
HiLog.error(TAG, "CodeListener onError errorCode: %{public}d,
act: %{public}d", errorCode, act);
}
};
...
codec.registerCodecListener(listener);
```
---

### 53. 某开发者创建了dispatcher_a和dispatcher_b两个串行任务分发器。在dispatcher_a分发的任务中,用dispatcher_b同步分发任务,在dispatcher_b分发的任务中,又用dispatcher_a同步分发任务。这将导致________(死锁/阻塞)。
### 答案:死锁
---

### 题解
- 同步分发任务,分发者会在当前线程等待任务完成
```java
taskDispatcher.syncDispatch(new Runnable() {
@Override
public void run() {
// 执行任务
}
});
```
- 在表示任务执行过程的run()方法返回前,当前线程会一直处于阻塞状态
```
dispatcher_a: ------ 任务一阻塞直到任务二完成
\
dispatcher_b: ----- 任务二阻塞直到任务三完成
\
dispatcher_a: -----X 任务三阻塞直到任务一完成
```
---

### 54. 某HarmonyOS开发者利用EventHandler机制处理A、B、C、D四个事件。其中事件D保持默认优先级,其它三个事件的优先级设置如下:
- __事件A:Priority.IMMEDIATE__
- __事件B:Priority.HIGH__
- __事件C:Priority.IDLE__
### 下列关于上述事件的描述中,正确的是哪几项?
__A)__ 事件D会先于事件C被投递
__B)__ 在没有其它事件的情况下,才投递事件C
__C)__ 事件D会先于事件B被投递
__D)__ 事件A会被立即投递
### 答案:ABD
---

### 题解
- 发送线程通过EventHandler向接收线程投递事件时可以指定事件的优先级
- 事件的优先级决定了事件被投递到接收线程EventQueue中的先后顺序
优先级|描述
-|-
Priority.IMMEDIATE|立即投递
Priority.HIGH|先于优先级为LOW的事件投递
Priority.LOW(默认)|先于优先级为IDLE的事件投递
Priority.IDLE|没有其它事件时投递
- 事件的默认优先级是LOW
---

### 55. 某开发者有多个版本的对象关系映射数据库。该开发者调用BookStoreUpgrade类实现数据库版本升级时,BookStoreUpgrade类的版本号配置为“3”,而当前BookStore.db的实际版本号为“1”。在此情形下, TestOrmMigration12类和TestOrmMigration23类的onMigrate()方法会被自动调用完成数据库升级。
### 答案:正确
---

### 题解
```java
@Database(entities = { ... }, version = 1)
public abstract class BookStore extends OrmDatabase {}
```
```java
@Database(entities = { ... }, version = 3)
public abstract class BookStoreUpgrade extends OrmDatabase {}
```
---

### 题解
```java
public class TestOrmMigration12 extends OrmMigration {
public TestOrmMigration12() { super(1, 2); }
@Override
public void onMigrate(RdbStore rdbStore) { ... }
}
```
```java
public class TestOrmMigration23 extends OrmMigration {
public TestOrmMigration12() { super(2, 3); }
@Override
public void onMigrate(RdbStore rdbStore) { ... }
}
```
---

### 题解
```java
OrmContext ormContext = (new DatabaseHelper(contex)).getOrmContext(
"BookStoreDB", "BookStore.db", BookStoreUpgrade.class,
new TestOrmMigration12(), new TestOrmMigration23());
```
---

### 56. 运动类传感器可能是单一物理传感器,也可能由多个物理传感器复合而成。
### 答案:正确
---

### 题解
- 在鸿蒙系统中,所有关于传感器的API都被封装在ohos.sensor包的六个类中
- 这些类的名字均以Category开头,并以Agent结尾,中间单词为:
- Motion、Environment、Orientation、Light、Body和Other
- 分别表示运动、环境、方向、光线、健康和其它传感器
- 传感器分类的依据是面向应用的能力集,而非实现其功能的物理设备
- 一个传感器类可能会涉及到多个不同的传感器设备
- 一个传感器设备可能同时支持多个不同的传感器类
---

### 题解
- 每类传感器提供的测量值,可能来自一个物理设备,也可能来自多个物理设备
传感器分类|代理类|测量值
:-:|-|-
运动|CategoryMotionAgent|加速度、角速度、步数
环境|CategoryEnvironmentAgent|温度、湿度、磁场、气压
方向|CategoryOrientationAgent|自由度、屏向、设备方向、旋转矢量
光线|CategoryLightAgent|接近光、环境光、色温、ToF
健康|CategoryBodyAgent|心率、佩戴
其它|CategoryOtherAgent|霍尔、手握
---

### 57. HarmonyOS提供IM(Instant Messaging)类意图识别的AI能力。该能力可以将语音信号转变为文本或命令,并识别出消息内容所代表的用户意图。
### 答案:错误
---

### 题解
- IM类意图识别是指利用机器学习技术,针对用户短信、聊天类即时通信(Instant Messaging)应用的文本消息进行内容分析,识别出消息内容所代表的用户意图
- IM类意图识别目前仅开放支持通知消息的三个识别模块:
- 还款提醒通知
- 还款成功通知
- 未接来电通知
- IM类意图识别目前仅支持中文语境
- IM类意图识别目前只能识别500个字符以内的文本
---

### 58. 通过远程模拟器侧边栏的按钮, 可以实现以下哪几项功能?
__A)__ 设置远程模拟器的设备分辨率
__B)__ 释放当前正在使用的远程模拟器
__C)__ 返回设备主界面
__D)__ 顺时针旋转屏幕
### 答案:ACD
---

### 题解

---

### 59. 一位开发者在AppGallery网页上添加HarmonyoOS应用,该开发者需要选择哪个平台添加应用?
__A)__ HarmonyOS应用
__B)__ Web应用
__C)__ Android应用
__D)__ 快应用
### 答案:A
---

### 题解

---

### 60. 某工程师准备在模拟器上调试HarmonyOS应用。正确的调试流程是哪项?
__A)__ 检查config.json配置→设置调试代码类型→设置HAP包安装方式
__B)__ 设置调试代码类型→检查config.json配置→设置HAP包安装方式
__C)__ 设置HAP包安装方式→检查config.json配置→设置调试代码类型
__D)__ 设置调试代码类型→设置HAP包安装方式→检查config.json配置
### 答案:B
---

### 题解

###### 第一步:设置调试代码类型
---

### 题解

###### 第二步:检查config.json配置
---

### 题解

###### 第三步:设置HAP包安装方式
---

# 真题详解(二)
---

### 1. 开发者在开发HarmonyOS应用时,不能使用以下哪个开发语言?
__A)__ Java
__B)__ C/C++
__C)__ Android
__D)__ JS(JavaScript)
### 答案:C
---

### 题解

###### 运行在系统服务层的方舟多语言运行时子系统目前支持Java、JS(JavaScript)和C/C++语言
---

### 2. HarmonyOS提供了访问外部存储设备的能力,如U盘,SD卡等。
### 答案:正确
---

### 题解

###### 借助于数据存储管理接口,开发者可以对内部存储和U盘、SD卡等外
部存储设备进行管理和开发,如获取存储设备列表、存储设备视图等
---

### 3. 在直播场景中,主播用运动相机作为直播镜头。该场景中使用了哪些HarmonyOS的分布式能力?
__A)__ 分布式文件服务
__B)__ 分布式数据服务
__C)__ 分布式软总线
__D)__ 分布式设备虚拟化
### 答案:CD
---

### 题解

###### 基于分布式设备虚拟化技术,可以实现不同设备间的资源融合、设备管理和数据
处理。多种设备共同形成一个超级虚拟终端。针对不同类型的任务,为用户匹配
并选择能力合适的执行硬件,让业务连续地在不同设备间流转,充分发挥不同设
备的能力优势,如显示能力、摄像能力、音频能力、交互能力以及传感器能力等
---

### 4. HarmonyOS的应用数据管理包含分布式数据服务、分布式________服务、融合搜索和数据存储管理等。
### 答案:文件
---

### 题解
- HarmonyOS的应用数据管理包括:
- 本地应用数据管理:关系型数据库、对象关系映射数据库、轻量级偏好数据库
- 分布式数据服务:用户数据跨设备同步,多种终端设备上一致的数据访问体验
- 分布式文件服务:多设备间的文件共享,同一应用文件的跨设备访问
- 数据搜索服务:单个设备上的搜索引擎级全文检索、建立索引和搜索
- 数据存储管理:系统存储路径、存储设备列表、存储设备属性的查询和管理
---

### 5. 在HarmonyOS系统架构中,以下哪项不属于应用框架层?
__A)__ 分布式数据管理
__B)__ Ability框架
__C)__ 用户程序框架
__D)__ UI框架
### 答案:A
---

### 题解

###### 分布式数据管理不属于应用框架层,它是系统服务层的一部分
---

### 6. HarmonyOS采用多内核设计,支持针对不同资源受限设备选用适合的OS内核,在手机上需要使用以下哪种内核?
__A)__ LiteOS-M
__B)__ Linux
__C)__ UNIX
__D)__ LiteOS-A
### 答案:B
---

### 题解

- LiteOS-A是面向Cortex-A系列芯片的非实时操作系统,适用于类似手机的电子产品
- LiteOS-M是面向Cortex-M系列芯片的实时操作系统,适用于智能家居等MCU类应用
- Linux是通用且功能丰富的非实时操作系统,目前鸿蒙手机上使用的依然是Linux内核
- UNIX是历史悠久的非实时操作系统,主要应用于服务器领域,存在很多变种如Linux
---

### 7. 开发者在分布式终端场景使用HarmonyOS时,可以通过以下哪些能力保证设备是安全可靠的?
__A)__ 可信执行环境
__B)__ 设备证书认证
__C)__ 零信任模型
__D)__ 安全启动
### 答案:ABD
---

### 题解
- HarmonyOS的系统安全性源于让正确的人,通过正确的设备,正确地使用数据
- 正确的人
- 零信任模型、多因素融合认证、协同互助认证
- 正确的设备
- 安全启动、可信执行环境、设备证书认证
- 正确地使用数据
- 围绕数据的生成、存储、使用、传输及销毁,提供全生命周期的保护
---

### 8. 游戏场景中,在智慧屏上玩游戏时,可以将手机当做遥控器,提升流畅的游戏体验。该场景中将手机当做游戏手柄体现了HarmonyOS的哪些分布式能力?
__A)__ 分布式软总线
__B)__ 分布式文件服务
__C)__ 分布式设备虚拟化
__D)__ 分布式任务调度
### 答案:AC
---

### 题解

###### 基于分布式设备虚拟化技术,可以实现不同设备间的资源融合、设备管理和数据
处理。多种设备共同形成一个超级虚拟终端。针对不同类型的任务,为用户匹配
并选择能力合适的执行硬件,让业务连续地在不同设备间流转,充分发挥不同设
备的能力优势,如显示能力、摄像能力、音频能力、交互能力以及传感器能力等
---

### 9. 在HarmonyOS的子系统中,以下哪些子系统属于增强软件服务子系统集?
__A)__ 多媒体子系统
__B)__ 穿戴专有业务子系统
__C)__ 智慧屏专有业务子系统
__D)__ 位置服务子系统
### 答案:BC
---

### 题解

###### 多媒体子系统和位置服务子系统分别属于基础软件服务子系统集和硬件服务子系
统集,穿戴专有业务子系统和智慧屏专有业务子系统属于增强软件服务子系统集
---

### 10. 某开发者在进行应用开发时,使用DevEco Studio创建了一个基于Java的空项目。虽然没有单独安装Node.js,但是仍能正常开发该项目。
### 答案:正确
---

### 题解

###### Node.js主要用于基于JS UI框架的HarmonyOS应用
开发,基于Java UI框架的应用项目并不需要Node.js
---

### 11. 用户将手机上的视频迁移至智慧屏播放。以下哪个回调方法可以保存手机上的视频播放数据?
__A)__ onSaveData()
__B)__ onRestoreData()
__C)__ onStartContinuation()
__D)__ onCompleteContinuation()
### 答案:A
---

### 题解

###### 可被迁移FA的Ability和AbilitySlice需要实现IAbilityContinuation接口。源设备上的
应用在onSaveData()中将数据放入Intent。目标设备上的应用在onRestoreData()
中从Intent获取数据。源设备上的应用在onCompleteContinuation()中退出运行
---

### 12. 某开发者在设计一个应用时,重写________方法添加按钮的响应逻辑,实现点击一个页面中的按钮跳转到下一个页面的功能。
### 答案:onClick()
---

### 题解
- Component类的setClickedListener()方法用于为调用组件设置点击事件侦听器
```java
void setClickedListener(Component.ClickedListener listener);
```
- 在Component.ClickedListener的子类中覆盖onClick()方法,处理点击事件
```java
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) { /* 此处添加按钮点击事件处理 */ }
});
```
- 也可以采用Lambda表达式的形式,处理点击事件
```java
button.setClickedListener(component -> { /* 此处添加按钮点击事件处理 */ });
```
---

### 13. 开发者在设计一款PA(Particle Ability)应用时,下列哪一项开发步骤可以被省略?
__A)__ 创建工程
__B)__ 实现功能
__C)__ 设计界面
__D)__ 运行程序
### 答案:C
---

### 题解

###### PA(Particle Ability)分为用于后台服务的Service Ability和用于数据抽象
的Data Ability。两者都不带有用户界面,开发过程中自然不需要设计界面
---

### 14. 用户完成手机视频迁移至智慧屏后,HarmonyOS会在手机侧调用哪个方法通知应用迁移流程已结束?
__A)__ onCompleteContinuation()
__B)__ onSaveData()
__C)__ onRestoreData()
__D)__ onStartContinuation()
### 答案:A
---

### 题解

###### 可被迁移FA的Ability和AbilitySlice需要实现IAbilityContinuation接口。源设备上的
应用在onSaveData()中将数据放入Intent。目标设备上的应用在onRestoreData()
中从Intent获取数据。源设备上的应用在onCompleteContinuation()中退出运行
---

### 15. 用户使用相机应用拍摄了一张照片,并将该照片分享到给手机、平板和大屏。该功能是通过应用数据管理中的哪项服务实现的?
__A)__ 分布式文件服务
__B)__ 数据存储管理
__C)__ 数据搜索服务
__D)__ 分布式数据服务
### 答案:A
---

### 题解

###### 借助分布式文件服务可在多台设备间分享文件
---

### 16. 下列关于HarmonyOS剪贴板功能的描述中,正确的是哪一项?
__A)__ 只支持复制
__B)__ 可以在应用A中复制,不可以在应用B中粘贴
__C)__ 只支持剪切
__D)__ 可以在应用A中复制,然后粘贴到应用B
### 答案:D
---

### 题解

###### 同一设备上的应用A和应用B之间可以借助系统剪贴板服务完成简单数
据的传递,即应用A向剪贴板服务写入数据,应用B再从中读取出数据
---

### 题解
- 在使用剪贴板时,需要注意以下几点:
- 只有在前台获得焦点的应用才有读取剪贴板的权限(默认输入法除外)
- 写入剪贴板的数据不会因其写入者应用的结束而被销毁
- 对同一用户而言,写入剪贴板的数据会被下一次写入剪贴板的数据覆盖
- 在同一设备内,剪贴板单次传递内容不应超过500KB
---

### 17. 下列关于Page与AbilitySlice描述正确的是哪一项?
__A)__ 一个Page可以不包含任何AbilitySlice
__B)__ 一个Page中只能包含一个AbilitySlice
__C)__ AbilitySlice可以脱离Page单独存在
__D)__ 一个Page可以包含一到多个AbilitySlice
### 答案:D
---

### 题解

###### 一个Page中可以包含一到多个AbilitySlice。AbilitySlice是指应用
的单个页面及其控制逻辑的总和。当一个Page由多个AbilitySlice
共同构成时,这些AbilitySlice提供的业务能力应具有高度相关性
---

### 18. 当开发者调用present()或presentForResult()时,如果指定的AbilitySlice实例已在栈中存在,则栈中位于该实例之上的AbilitySlice均会________。
### 答案:出栈并终止其生命周期
---

### 题解
###### 系统为每个Page维护一个AbilitySlice实例的栈。每个进入前台的AbilitySlice实例均
会入栈。当开发者调用present()或presentForResult()时,如果指定的AbilitySlice实
例已在栈中存在,则栈中位于该实例之上的AbilitySlice均会出栈并终止其生命周期
---

### 19. 某开发者在XML中创建了一个Text组件,并设置了组件ID为text1,请在横线处填写代码:
```xml
```
### 答案:`$+id:text1`
---

### 题解
- 在XML文件中为组件指定id属性
```xml
```
- 在Java代码中通过组件id获取组件对象
```java
Text text = (Text) findComponentById(ResourceTable.Id_text1);
```
---

### 20. 某开发者在开发后台服务时,需要创建Service Ability。下列哪个方法不是该Ability的生命周期方法?
__A)__ onCommand()
__B)__ onStop()
__C)__ onActive()
__D)__ onStart()
### 答案:C
---

### 题解

###### 无论是以启动——停止模式,还是以连接——断开模式调用Service
Ability,在Service Ability的生命周期中,都不会调用onActive()方法
---

### 21. 某开发者订阅了公共事件,并在onReceiveEvent()回调方法中处理所订阅的事件。代码如下:
```java
EventRunner runner = EventRunner.create();
MyEventHand1er myHandler = new MyEventHandler(runner);
@Override
public void onReceiveEvent(CommonEventData commonEventData) {
final AsyncCommonEventResult result = goAsyncCommonEvent();
Runnable task = new Runnable() {
@Override
public void run() {
// 待执行的操作,由开发者定义
result.finishCommonEvent();
}
}
myHandler.postTask(task);
}
```
---

### 请问这段代码可以解决什么问题?
__A)__ 设置了有序公共事件的优先级
__B)__ 实现异步操作,解决了在onReceiveEvent()回调方法中不能执行耗时操作的问题
__C)__ 发布者有权限发布粘性公共事件
__D)__ 赋予订阅者权限
### 答案:B
---

### 题解

###### 每一个EventHandler都与一个由EventRunner创建的线程绑定,该线程内部有
一个事件队列。EventHandler可以向事件队列投递InnerEvent事件或Runnable
任务。EventRunner从事件队列中循环地取出事件,如果取出是InnerEvent事
件,则在EventRunner所在线程执行EventHandler的processEvent()方法;如果
取出的是Runnable任务,则在EventRunner所在线程执行Runnable的run()方法
---

### 22. 某公司在开发HarmonyOS应用时,需要自定义一个画板控件。在对触摸事件的监听中,如何获取当前触摸点在整个屏幕中的X坐标?
__A)__ `touchEvent.getPointerPosition(touchEvent.getItem()).getX()`
__B)__ `touchEvent.getPointerPosition(touchEvent.getIndex()).getX()`
__C)__ `touchEvent.getPointerScreenPosition(touchEvent.getIndex()).getX()`
__D)__ `touchEvent.getPointerScreenPosition(touchEvent.getItem()).getX()`
### 答案:C
---

### 题解
- TouchEvent类的getPointerScreenPosition()方法返回触摸点相对于屏幕坐标系的坐标
- 该方法的参数是来自getIndex()方法返回的触摸行为索引
- 该方法返回一个MmiPoint类型的对象,表示一个点
- 由getX()方法获得点的水平坐标
- 由getY()方法获得点的垂直坐标
---

### 23. 开发者设计了一款游戏应用,首页为MainAbility。点击桌面上的游戏图标,然后按下Home键,将游戏隐藏到后台。MainAbility的生命期是如何变化的?
__A)__ onStart()→onActive()→onInActive()
__B)__ onStart()→onActive()→onInActive()→onBackground()
__C)__ onStart()→onActive()→onInActive()→onStop()
__D)__ onStart()→onResume()→onInActive()→onBackground()
### 答案:B
---

### 题解

---

### 24. 在JavaScript UI框架中,哪一层用于提供动画解析、DOM(Document Object Model)树构建、布局计算、渲染命令构建与绘制、事件管理等能力?
__A)__ 应用层
__B)__ 引擎层
__C)__ 前端框架层
__D)__ 平台适配层
### 答案:B
---

### 题解

---

### 题解
- 应用层(Application):开发者使用JS UI框架开发的FA应用
- 前端框架层(Framework):前端页面解析、MVVM(Model-View-ViewModel)开发模式、页面路由、自定义组件
- 引擎层(Engine):动画解析、DOM(Document Object Model)树构建、布局计算、渲染命令构建与绘制、事件管理
- 平台适配层(Porting Layer):平台抽象,借助抽象接口对接系统平台,如事件对接、渲染管线对接、系统生命周期对接等
---

### 25. 下列哪一项Page Ability生命周期的回调行为,能够销毁页面?
__A)__ 调用onStop()释放资源
__B)__ Page失去焦点,调用onInActive()
__C)__ 调用onDestroy()释放资源
__D)__ Page不再可见,调用onBackground()释放资源
### 答案:A
---

### 题解

###### 当系统即将销毁Page实例时,会触发onStop()回调方法,通知应用释放所持有的资源
---

### 26. 某开发者在开发一款订机票应用。在机票的起始地点选择上,使用了滑动选择器Picker并编写了如下代码:
```xml
```
---

### 以下关于该代码段描述正确的有哪几项?
__A)__ 选中文本的颜色为白色
__B)__ 当前值为9
__C)__ 最大值为10
__D)__ 选中文本的大小为26fp
### 答案:A
---

### 题解

---

### 27. 某开发者在开发一款新闻软件时,用Text组件实现跑马灯,使信息自动滚动。为实现跑马灯效果,需要对Text组件做一些设置。请在横线处填写代码:
```xml
```
### 答案:`false`,`1`
---

### 题解
- 为了实现跑马灯效果,需要将Text组件的multiple_lines属性设置为false,不换行,同时将max_text_lines属性设置为1,最多显示一行
```java
// 跑马灯效果
text.setTruncationMode(Text.TruncationMode.AUTO_SCROLLING);
// 始终处于自动滚动状态
text.setAutoScrollingCount(Text.AUTO_SCROLLING_FOREVER);
// 启动跑马灯效果
text.startAutoScrolling();
```
---

### 28. 某开发者在给一个Text组件设置背景时,以下方法中正确的是哪几项?
__A)__ `ohos:background_element="$media:media_src"`
__B)__ `ohos:background_element="$color:black"`
__C)__ `ohos:basement="$graphic:graphic_src"`
__D)__ `ohos:background_element="#000000"`
### 答案:ABD
---

### 题解
- Text组件的background_element属性表示文本背景
- Text组件没有basement属性
- basement是TextField组件的特有属性,表示输入框的基线
- background_element属性和basement属性的值可设置为:
- 颜色值,如`"#000000"`
- 颜色名,如`"$color:black"`
- /resources/base/graphic下的图形脚本,如`"$graphic:graphic_src"`
- /resources/base/media下的图片资源,如`"$media:media_src"`
---

### 29. 某开发者在设置文本组件时,实现了文本内容过长能够自动换行的功能,并且行数最大显示为5行。请在横线处填写代码:
```xml
```
### 答案:`true`,`5`
---

### 题解
- Text组件的布尔型属性multiple_lines表示当文本内容过长时是否自动换行
- Text组件的整数型属性max_text_lines表示文本的最大行数
---

### 30. 在分布式任务调度中,仅通过启动/关闭两种方式对PA(Particle Ability)进行调度,无法应对需要长期交互的场景。因此,分布式任务调度平台向开发者提供了跨设备PA(Particle Ability)的________和断开能力。
### 答案:连接
---

### 题解

###### 应用调用本地或远程PA(Particle Ability)即Service,包括两种模式:启动——停止模式
和连接——断开模式。前者适用于不需要与Service交互的场合,而后者则适用于交互场合
---

### 31. 如果容器组件内部没有可以获得焦点的子组件,那么即使将其focusable属性设置为true,也无法获得焦点。如果将容器组件的focusable属性设置为false,那么该容器本身连同它所包含的所有子组件都不可获得焦点。
### 答案:正确
---

### 题解
- 焦点移动是智慧屏的主要交互方式
- 通用属性focusable主要用于控制组件能否获得焦点
- 本身不支持焦点的组件在设置此属性后可以拥有获得焦点的能力
- 在没有使用focusable属性的情况下,如果使用了focus、blur或key事件,也会默认添加focusable属性为true
- 容器组件是否可以获得焦点不仅取决于其本身的focusable属性,还与其子组件有关
- 如果容器组件内部没有可以获得焦点的子组件,那么即使将其focusable属性设置为true,也无法获得焦点
- 如果将容器组件的focusable属性设置为false,那么该容器本身连同它所包含的所有子组件都不可获得焦点
---

### 32. 当MainAbility与MainAbilitySlice绑定在一起时,二者的生命周期是同步的,状态转换回调方法也是一致的。
### 答案:错误
---

### 题解
- AbilitySlice是Ability的组成部分,其生命周期依托于其所在的Ability
- AbilitySlice和Ability有相同的生命周期状态和同名的生命周期方法
- 当Ability的生命周期状态发生变化时,其AbilitySlice的生命周期状态也会发生相应变化
- AbilitySlice拥有独立的生命周期
- 当一个Ability内部的多个AbilitySlice发生切换时,Ability的生命周期状态不变,AbilitySlice的生命周期状态却会发生变化
---

### 33. 当用户在不同Page间导航时,AbilitySlice作为Page的内部单元,通过配置Intent的________属性导航到目标AbilitySlice。
### 答案:AbilityName
---

### 题解
- 从MainAbility跳转到SecondaryAbility
```java
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.huawei.myapp")
.withAbilityName("com.huawei.myapp.SecondaryAbility")
.build();
intent.setOperation(operation);
startAbility(intent);
```
- 从SecondaryAbility返回MainAbility
```java
terminateAbility();
```
---

### 34. 某开发者设计了一个点赞应用,点击按钮点赞数加一,再点则减一:
```js
export default {
data: {
likeImage: '/common/unLike.png'
isPressed: false,
total: 20,
}
likeClick() {
var temp;
if (!this.isPressed) {
temp = this.total + 1;
this.likeImage = '/common/1ike.png'
} else {
temp = this.total - 1;
this.likeImage = '/common/unLike.png'
}
this.total = temp;
this.isPressed = !this.isPressed;
}
}
```
---

### 请在横线处填写代码:
```xml
```
### 答案:`likeClick`
---

### 题解

###### 交互通过为组件关联事件实现。点赞交互通过在HML文件中为包含image组件和text
组件的div组件关联click事件实现。click事件的处理函数likeClick()则定义在JS文件中
---

### 35. 某开发者开发一款后台音乐播放软件时,需要用到Service Ability。下列关于Service Ability的使用过程描述正确的有哪几项?
__A)__ 通过connectAbility()方法连接Service时,需要传入目标Service的Intent
__B)__ 通过Intent的setElement()方法设置目标服务信息
__C)__ 在应用清单文件注册Ability
__D)__ 需要从onConnect()回调方法中返回一个IRemoteObject对象
### 答案:AD
---

### 题解
- 客户机和服务器共用的远程对象类
```java
public class RemoteObject extends LocalRemoteObject {
...
}
```
- 服务器在Ability的onConnect()回调方法中返回远程对象
```java
public class ServiceAbility extends Ability {
...
@Override
public IRemoteObject onConnect(Intent intent) {
return new RemoteObject();
}
}
```
---

### 题解
- 客户机创建连接对象
```java
IAbilityConnection connection = new IAbilityConnection() {
@Override
public void onAbilityConnectDone(ElementName elementName,
IRemoteObject iRemoteObject, int i) {
RemoteObject object = (RemoteObject) iRemoteObject;
...
}
@Override
public void onAbilityDisconnectDone(
ElementName elementName, int i) {
...
}
};
```
---

### 题解
- 客户机发起服务连接
```java
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId("deviceId")
.withBundleName("com.huawei.himusic")
.withAbilityName("com.huawei.himusic.ServiceAbility")
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
.build();
intent.setOperation(operation);
connectAbility(intent, connection);
```
---

### 36. 一位开发者想要将Button组件设置为椭圆。以下背景图形中哪一项正确?
__A)__
```xml
```
__B)__
```xml
```
---

__C)__
```xml
```
__D)__
```xml
```
### 答案:C
---

### 题解

---

### 37. 开发者在同一Page内导航,AbilitySlice均为新建,即便重复调用present(new TargetSlice(), new Intent()),也不会导致任何AbilitySlice出栈。
### 答案:正确
---

### 题解
###### 系统为每个Page维护一个AbilitySlice实例的栈。每个进入前台的AbilitySlice
实例均会入栈。当开发者调用present()或presentForResult()时,如果指定的
AbilitySlice实例已在栈中存在,则栈中位于该实例之上的AbilitySlice均会出栈
并终止其生命周期。若每次传给present()或presentForResult()的AbilitySlice
实例都是新建的,即便重复调用这些方法,也不会导致任何AbilitySlice出栈
---

### 38. 某开发者设计了一个普通按钮和一个椭圆按钮。两个按钮的底色都为蓝色,文本都为“button”。这两个按钮组件有什么共同之处?
__A)__ 都需要设置背景色
__B)__ 都需要设置形状
__C)__ 都不需要设置形状
__D)__ 都需要设置文本
### 答案:AD
---

### 题解

###### 椭圆按钮需要通过/resources/graphic下的XML文件为其定义形状,普通按
钮无需设置形状。颜色和文本,无论是普通按钮还是椭圆按钮都需要设置
---

### 39. 多模输入在已支持输入事件的基础上,将用户常用的一些输入动作定义为一组标准化事件,将不同输入设备的输入事件映射到标准化事件上。
### 答案:正确
---

### 题解
- 用户与应用的交互模式日趋多样化,除传统的键盘、鼠标外,还包括触摸、遥控器、语音等
- 将源自不同设备或方式的输入动作映射到一组标准化事件上,既简化了应用程序的开发,又有助于使用不同终端和应用的用户获得一致性的体验
- 标准化事件专注于用户意图,而与具体输入设备无关
- 通用标准化事件:确定、取消、返回、复制、粘贴、刷新、翻页、拖拽······
- 通话标准化事件:接听、拒接、挂断······
- 媒体标准化事件:播放、暂停、停止······
- 系统标准化事件:关闭、静音······
- 开发者可以选择使用标准化事件还是UI框架监听事件响应输入,但不建议同时使用
---

### 40. 某开发者使用HarmonyOS实现了,将手机上写了一半的邮件流转到平板继续编辑的功能。该场景体现了分布式任务调度的哪个能力?
__A)__ 连接远程PA(Particle Ability)
__B)__ FA(Feature Ability)跨设备迁移
__C)__ 启动远程PA(Particle Ability)
__D)__ 关闭远程FA(Feature Ability)
### 答案:B
---

### 题解

###### 分布式任务调度支持对跨设备应用的远程启动、远程调用、远程连接以及迁移等操作
---

### 41. 开发者在进行HarmonyOS应用开发时,需要使用各种组件对应用的UI进行开发。在Component支持的XML基础属性中,哪几项是必须设置的?
__A)__ id
__B)__ height
__C)__ theme
__D)__ width
### 答案:BD
---

### 题解
- Java UI框架中的每种组件都有各自的XML属性列表
- 存在继承关系的组件,子类组件继承父类组件的全部属性
- Component作为所有组件的基类,拥有各类组件的公共属性,如ID、布局参数等
```xml
<...
ohos:id="$+id:text"
ohos:width="20vp"
ohos:height="10vp"
...
/>
```
- 如果不在XML文件或Java代码中引用该组件,可以不为其设置ID属性,但表示其宽度和高度的width和height属性是不可或缺的
---

### 42. 同一台设备上,一个Service只能有一个实例。当多个Ability共享该实例时,只有与其绑定的所有Ability都退出后,该Service才能退出。
### 答案:正确
---

### 题解
- Service不提供用户界面,运行后台任务,如播放音乐、下载文件等
- 一个Service可被其它应用或Ability启动,即使用户切换到其它应用,该Service仍在后台继续运行
- Service是单实例的,同一台设备上,一个Service只能有一个实例。当多个Ability共享该实例时,只有与其绑定的所有Ability都退出后,该Service才能退出
- Service在主线程里执行,如果执行任务耗时较长,必须创建辅助线程,避免UI阻塞
---

### 43. 在JavaScript UI开发中,对于wearable工程和TV工程,首页的名字可以不是index,pages配置列表中的第一个page即是首页,而对于litewearable工程,首页名字必须是index。
### 答案:错误
---

### 题解
###### config.json中module.js对象的pages属性是一个页面路由信息的列
表,其中的第一个元素,无论是否名为index,即代表JS FA的首页
---

### 44. 通过setLayoutManager()方法可以实现ListContainer表格布局。
### 答案:正确
---

### 题解
- ListContainer类的setLayoutManager()方法
- `void setLayoutManager(LayoutManager layoutManager);`
- 为列表容器设置用于排列表项的布局管理器
```java
listContainer = (ListContainer) findComponentById(ResourceTable.Id_listContainer);
TableLayoutManager tableLayoutManager = new TableLayoutManager();
tableLayoutManager.setRowCount(3);
tableLayoutManager.setColumnCount(4);
listContainer.setLayoutManager(tableLayoutManager);
```
---

### 45. 虽然一个Page可以包含多个AbilitySlice,但是当Page进入前台时,界面默认只展示一个AbilitySlice。
### 答案:正确
---

### 题解

###### 虽然一个PageAbility可以包含多个AbilitySlice,但是当PageAbility进入前台时屏幕
上只显示一个AbilitySlice。默认显示的AbilitySlice是通过setMainRoute()方法指定的
---

### 46. 某开发者以如下方式打印日志:
```java
HiLog.warn(LABEL, "Failed to visit %{private}s, reason: %{public}d.", url, errno);
```
### 请问该日志属于何种级别?
__A)__ 一般信息
__B)__ 调试信息
__C)__ 一般错误
__D)__ 警告信息
### 答案:D
---

### 题解
- HiLog定义了五个日志等级,并提供了对应的方法以输出不同等级的日志:
等级|方法|描述
:-:|:-:|-
DEBUG|debug|调试信息:需要在设备的开发人员选项中打开USB调试开关
INFO|info|一般信息:一般意义的普通信息
WARN|warn|警告信息:不影响程序运行,但值得关注
ERROR|error|一般错误:进入错误处理流程,无法获得预期结果
FATAL|fatal|致命错误:不可恢复的严重错误,程序无法继续运行
- DevEco Studio集成开发环境的日志窗口,可根据日志等级进行过滤
---

### 47. 某开发者正在编写一段代码来控制对某Ability的访问权限。要求只有拥有“ohos.permission.CAMERA”权限的应用才能访问该Ability。其在config.json中编写如下代码:
```json
"abilities": [
{
"name": ".MainAbility",
"description": "$string:deseription_main_ability",
"icon": "$media:hiworld.png",
"label": "HiCamera",
"launchType": "standard",
"orientation": "portrait",
"visible": false,
________
}
]
```
---

### 该开发者需要在横线处补充下列哪一项?
__A)__
```json
"permissions": [
"ohos.permission.LOCATION"
]
```
__B)__
```json
"defPermissions": [
{
"name": "ohos.permission.CAMERA"
}
]
```
---

__C)__
```json
"permissions": [
"ohos.permmssion.CAMERA"
]
```
__D)__
```json
"reqPermissions": [
{
"name": "ohos.permmssion.CAMERA"
}
]
```
### 答案:C
---

### 题解
###### config.json文件中ability对象的permissions属性表示其它应用的Ability
访问此Ability时需要申请的权限。通常采用反向域名格式,取值既可以
是系统预定义的权限,也可以是开发者自定义的权限。如果是自定义权
限,其值必须与module对象defPermissions属性中定义的某个权限一致
---

### 48. 为了提升网络图片的画质,开发者可以使用HarmonyOS提供的IM(Instant Messaging)类意图识别接口。
### 答案:错误
---

### 题解
- 提升网络图片画质的主要手段是提高图片的分辨率,即图像超分

- 基于硬件的深度神经网络加速器,提供适用于移动终端的1x和3x超分能力
- 加大图像压缩比:节省存储空间和传输流量
- 抑制压缩噪声:1x超分去除高压缩比图片的压缩噪声
- 高质量放大:3x超分将图片放大3倍,同时有效抑制压缩噪声
---

### 49. 某开发者利用HarmonyOS提供的AI能力实现下列功能:
- __从文档、街景的照片中提取文字信息,基于这些信息提供翻译、搜索等服务__
- __拍照各种票据的图片,从这些图片中提取计算机等设备能够处理的字符信息__
### 上述功能的实现用到了HarmonyOS的哪种AI能力?
__A)__ 文字图像超分
__B)__ 词性标注
__C)__ 通用文字识别
__D)__ 关键字提取
### 答案:AC
---

### 题解

###### 文字识别技术主要解决在从图像中提取能够被计算机等设备处理的字符信息的问题
---

### 50. HarmonyOS允许开发者通过配置“reqPermissions”字段,申请访问受保护对象的权限。“reqPermissions”字段在哪个文件中配置?
__A)__ config.json
__B)__ string.json
__C)__ MainAbilitySlice.java
__D)__ ability_main.xml
### 答案:A
---

### 题解
- config.json文件中module对象的reqPermissions属性表示应用向系统申请的权限
```json
"reqPermissions": [
{
"name": "ohos.permission.INTERNET",
"reason": "internet",
"usedScene": {
"ability": [
"com.minwei.dictionary.MainAbility"
],
"when": "always"
}
}
]
```
---

### 51. 用户在驾驶汽车时,无法腾出双手操作手机,但可以通过语音助手与之交互。上述场景属于实体识别类的典型应用。
### 答案:错误
---

### 题解

###### 语音助手是基于语音识别技术的典型应用,旨在将语音信息转换为能够
被计算机等设备处理的字符信息。实体识别是将文本中具有特定意义的
词(实体),如人名、地名、机构名、专有名词等提取出来并加以标注
---

### 52. 某工程师借助HarmonyOS的网络管理模块,可以实现以下哪几项功能?
__A)__ 创建本地套接字
__B)__ 数据连接管理
__C)__ HTTP缓存管理
__D)__ 数据网络管理
### 答案:ABCD
---

### 题解
- HarmonyOS的网络管理模块主要提供以下功能:
- 数据连接管理:绑定网卡、打开URL、查询数据链路参数
- 数据网络管理:指定数据网络传输、查询数据网络状态、响应数据网络变更
- 流量统计、HTTP缓存管理、创建本地套接字
---

### 53. 某第三方应用已提前注册飞行模式设置回调。当用户通过系统设置修改终端的飞行模式状态时,该应用会感知到此设置发生变化并进行适配。关闭飞行模式,应用进入离线状态;开启飞行模式,应用重获在线数据。
### 答案:错误
---

### 题解

###### 开启飞行模式,应用进入离线状态;关闭飞行模式,应用重获在线数据
---

### 54. 某开发者在基于HarmonyOS进行应用开发时,使用的数据可以分解为多个对象。该开发者需要对数据进行增删改查等操作,但是不希望编写过于复杂的SQL语句。此场景下,该开发者可以使用对象关系映射数据库来处理数据。
### 答案:正确
---

### 题解

---

### 55. 为了将一系列相互关联的下载任务放入任务组,某开发者编写了如下代码:
```java
String dispatcherName = "parallelTaskDispatcher";
TaskDispatcher dispatcher = createParallelTaskDispatcher(dispatcherName, TaskPriority.DEFAULT);
Group group = dispatcher.createDispatchGroup();
dispatcher.asyncGroupDispatch(group, new Runnab1e() {
@Override
public void run() {
HiLog.info(LABEL_LOG, "download task1 is running");
}
});
dispatcher.asyncGroupDispatch(group, new Runnable() {
@Override
public void run() {
HiLog.info(LABEL_LOG, "download task2 is running");
};
});
dispatcher.groupDispatchNotify(group, new Runable() {
@Override
public void run() {
HiLog.info(LABEL_LOG, "the close task is running after all tasks in the group ara completed");
};
});
```
---

### 运行这段代码,可能出现下列哪些执行结果?
__A)__
```
download task1 is running
download task2 is running
the close task is running after all tasks in the group are completed
```
__B)__
```
the close task is running after all tasks in the group are completed
download task1 is running
download task2 is running
```
---

__C)__
```
download task1 is running
the close task is running after all tasks in the group are completed
download task2 is running
```
__D)__
```
download task2 is running
download task1 is running
the close task is running after all tasks in the group are completed
```
### 答案:AD
---

### 题解

###### 异步组分发(asyncGroupDispatch):分发任务并立即返回一个用
于取消该任务的接口(Revocable),任务组由彼此存在某种联系的
多个任务组成,可以指定在组内任务执行完以后执行的终结任务
---

### 56. 采样是指将连续时域上的数字信号按照一定的时间间隔采样,获取到离散时域上离散信号的过程。
### 答案:错误
---

### 题解

###### 采样:在连续的时间域上,获取离散的信号
---

### 57. 某开发者在开发HarmonyOS应用时,收到了如下产品需求:若用户在设备A和设备B上登录了相同的HarmonyOS账号,用户在设备A上登录该应用后,即可按需同步应用账号认证信息到设备B上。账号认证信息同步后,该用户无需再次输入应用账号认证信息,即可在设备B上打开该应用并直接登录使用。下列关于此场景的描述中,正确的是哪几项?
__A)__ 若开发者使用DVID实现上述功能,因为DVID与HarmonyOS账号及应用程序信息强关联,所以能够避免其它应用获取当前应用的数据
__B)__ 若开发者借助UUID实现上述需求,应用卸载后UUID标识依然存在
__C)__ 该开发者可以借助DVID实现上述需求,因为应用可以根据DVID访问和管理分布式设备
__D)__ 该开发者可以借助UUID实现上述功能,因为应用在其生命周期内可以用UUID唯一地标识同一台设备
### 答案:ACD
---

### 题解
- DVID(Distributed Virtual Device Identifier,分布式虚拟设备标识符)
- 设备登录HarmonyOS账号,系统根据该账号及应用程序信息生成DVID
- 应用根据DVID访问和管理分布式设备,具备类似管理本地设备的能力和体验
- 为防止其它应用获取当前应用的数据,如用户行为收集等,DVID与HarmonyOS账号及应用程序信息强关联,在登录相同HarmonyOS账号的分布式设备上,相同应用得到的DVID相同,不同应用得到的DVID不同
- 登录相同HarmonyOS账号的多个分布式设备,应用在一台设备上登录后,可按需同步应用账号认证信息(账号名、令牌等)给其它设备。在其它设备上打开该应用不再需要输入应用账号认证信息,直接登录
- 应用服务器端可以根据DVID管理相同应用账号下的分布式虚拟设备列表
---

### 题解
- UUID(Universally Unique Identifier,通用唯一标识符)
- 随机生成的字符串,同一时空内所有设备生成的UUID都不同
- 应用在其生命周期内可以用UUID唯一地标识同一台设备
- 应用服务器端可以根据UUID统计分析在每一台设备上的应用使用情况,UUID作为设备的唯一标识,以区别其它设备
- 应用一旦卸载,UUID即随之销毁,重装应用后会获得一个全新的UUID,因此UUID不会持久地标识同一台设备
---

### 58. HarmonyOS关系型数据库对外提供通用的操作接口,底层使用________作为持久化存储引擎。
### 答案:SQLite
---

### 题解

###### HarmonyOS关系型数据库提供了一套完整的针对本地数据库的管理机制,对外
提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite的所有
数据库特性,如事务、索引、视图、触发器、外键、参数化查询、预编译SQL等
---

### 59. 开发者生成的密钥包含非对称加密中使用的公钥和私钥,该密钥以什么格式存储在密钥库文件中?
__A)__ .p7b
__B)__ .cer
__C)__ .csr
__D)__ ·p12
### 答案:D
---

### 题解
- 在基于手动签名的应用部署过程中会用到以下文件:
扩展名|描述
-|-
.p12|密钥文件,保存开发者的公私密钥
.csr|证书请求文件,用于申请数字证书
.cer|数字证书文件,用于对应用做验证
.p7b|供应商概述文件,包含证书和设备
---

### 60. 原子化服务由一到多个HAP包组成,一个HAP包对应一个FA或PA。每个FA或PA均可独立运行,完成一个特定的功能。
### 答案:正确
---

### 题解
- 原子化服务是一种旨在提供特定功能的,免安装且有独立入口的应用形态。免安装是其区别于传统应用的显著特征。原子化服务是一种面向未来的服务提供方式
- 原子化服务由一到多个HAP包组成,大小不超过10M字节,一个HAP包对应一个FA或PA。每个FA或PA均可独立运行,完成一个特定的功能
- 原子化服务在桌面上是没有图标的,可以借助“服务中心”对所有原子化服务统一查看、搜索和管理
- 原子化服务在“服务中心”以卡片形式显示,可将其添加到桌面
---

# 真题详解(三)
---

### 1. HarmonyOS系统主要分为:
__A)__ 内核层
__B)__ 系统服务层
__C)__ 应用框架层
__D)__ 应用层
### 答案:ABCD
---

### 题解

###### HarmonyOS整体遵循层次化设计,自下而上依次为内核层、系统服务层、应用框架层和应用层
---

### 2. HarmonyOS的UI框架支持以下哪些语言?
__A)__ Java
__B)__ JS
__C)__ C/C++
__D)__ Python
### 答案:AB
---

### 题解
- HarmonyOS的应用框架层包括用户程序框架、元能力框架和UI框架
- 用户程序框架和元能力框架支持Java、JS和C/C++语言
- UI框架支持Java和JS语言,即Java UI框架和JS UI框架
- HarmonyOS目前没有提供对Python语言的任何支持
---

### 3. 通过HarmonyOS的分布式数据管理技术,能够让开发者轻松实现全场景、多设备下的数据存储、共享和访问。
### 答案:正确
---

### 题解

###### 用户数据不再与单一的物理设备绑定,业务逻辑与数据存储分离,跨设备的数
据处理如同本地数据处理一样方便快捷,让开发者能够轻松实现全场景、多设
备下的数据存储、共享和访问,为打造一致、流畅的用户体验创造了基础条件
---

### 4. HarmonyOS支持根据________实现组件弹性部署。
__A)__ 硬件价格
__B)__ 硬件形态和需求
__C)__ 硬件资源情况和功能需求
__D)__ 编译链关系
### 答案:BCD
---

### 题解
- 统一OS,弹性部署
- 组件可有可无:根据硬件的形态和需求,选择所需的组件
- 组件可大可小:根据硬件的资源情况和功能需求,配置组件的功能集
- 平台可大可小:根据编译链关系,自动生成组件化的依赖关系
---

### 5. 一个APP中,只能有一个entry类型的HAP。
### 答案:错误
---

### 题解

###### entry类型的HAP是应用的主模块,即入口包。应用支持的每一种设
备都需要一个入口包。只支持一种设备的应用有且仅有一个入口包
---

### 6. 一个APP中通常需要包括应用的全局和在具体设备上的配置信息。这些信息通常位于________文件中。
__A)__ Manifest.xml
__B)__ build.gradle
__C)__ config.json
__D)__ local.properties
### 答案:C
---

### 题解
- 构成应用的每个HAP,其根目录下都有一个名为config.json的配置文件,其中包括:
- 全局配置信息,如包名、厂商、版本号等
- 针对具体设备的配置信息,如备份恢复、网络安全等
- HAP包的配置信息
- 每个Ability的基本属性,如包名、类名、类型、能力等
- 应用访问系统或其它应用受保护部分所需要的权限等
---

### 7. 应用需要在config.json中通过________属性对需要的权限逐个进行声明。
__A)__ uses-permission
__B)__ reqPermissions
__C)__ distro
__D)__ abilities
### 答案:B
---

### 题解
- 应用需要在config.json中使用reqPermissions属性对需要的权限逐个进行声明
- 若使用到的第三方库涉及权限使用,也需统一在应用的config.json中逐个声明
- 没有在config.json中显式声明的权限,应用一律无法获得授权
- 某些敏感权限除了要在config.json中显式声明以外,还需要在运行时通过系统动态申请权限接口,向用户弹框请求授权。由用户根据应用场景上下文和权限申请的合理性,做出是否授权的判断和选择
---

### 8. 一个Service可被其它应用或Ability启动,即使用户切换到其它应用,该Service仍在后台继续运行。
### 答案:正确
---

### 题解
- Service不提供用户界面,运行后台任务,如播放音乐、下载文件等
- 一个Service可被其它应用或Ability启动,即使用户切换到其它应用,该Service仍在后台继续运行
- Service是单实例的,同一台设备上,一个Service只能有一个实例。当多个Ability共享该实例时,只有与其绑定的所有Ability都退出后,该Service才能退出
- Service在主线程里执行,如果执行任务耗时较长,必须创建辅助线程,避免UI阻塞
---

### 9. 在HarmonyOS中,Ability分为________和________,以实现不同的业务功能。
__A)__ Broadcast Ability
__B)__ Feature Ability
__C)__ Particle Ability
__D)__ Content Ability
### 答案:BC
---

### 题解
- 在HarmonyOS中,Ability分为:
- Feature Ability(FA)
- Page Ability:用户交互
- Particle Ability(PA)
- Service Ability:后台服务
- Data Ability:数据访问
- 在config.json中注册Ability时,通过type属性指定其类型:
- page:Page Ability
- service:Service Ability
- data:Data Ability
---

### 10. 以下哪些是Page Ability的生命周期回调方法?
__A)__ onStart()
__B)__ onActive()
__C)__ onInActive()
__D)__ onBackground()
__E)__ onStop()
__F)__ onForeground()
### 答案:ABCDEF
---

### 题解

---

### 题解
- 一个Page Ability在其生命周期中会先后经历启动(INITIAL)、无焦(INACTIVE)、有焦(ACTIVE)和后台(BACKGROUND)四种状态。状态间隙调用生命周期方法:
生命周期方法|回调时机
-|-
onStart()|刚刚启动,初始化,分配资源
onActive()|即将获得焦点,设置监听
onInActive()|即将失去焦点,取消监听
onBackground()|即将退至后台
onForeground()|即将进入前台
onStop()|即将终止,销毁资源
---

### 11. 在HarmonyOS中,可以使用的UI框架包括哪些?
__A)__ C++ UI框架
__B)__ Java UI框架
__C)__ Swing UI框架
__D)__ JS UI框架
### 答案:BD
---

### 题解

###### 截至目前,HarmonyOS只提供两种UI框架,支持Java开发
语言的Java UI框架和支持JavaScript开发语言的JS UI框架
---

### 12. 在Java UI框架中,布局将Component和ComponentContainer以树状的层级结构进行组织,这样的布局被称为组件树。
### 答案:正确
---

### 题解

###### 布局把Component和ComponentContainer以树状的层级结构进行组
织,这样的布局被称为组件树。组件树的特点是仅有一个根组件,其
它组件有且仅有一个父组件,组件与组件的关系受父组件的规则约束
---

### 13. JS UI框架采用________和________作为页面布局和页面样式的描述语言。页面的业务逻辑则通过________语言进行描述。
__A)__ HTML
__B)__ HML
__C)__ Java
__D)__ CSS
__E)__ XML
__F)__ JavaScript
### 答案:BDF
---

### 题解

###### JS UI框架在HML文件中定义页面的布局、页面中包含的组件,以及这些组件的
层级关系,在CSS文件中定义页面的样式,如组件的大小、位置、颜色等,在
使用JavaScript语言编写的JS文件中定义页面的数据绑定、事件处理等业务逻辑
---

### 14. syncDispatch()方法可能导致死锁。
### 答案:正确
---

### 题解
- 在某个串行任务分发器分发的任务中,又用该任务分发器同步分发任务,导致死锁
```
dispatcher_a: --------- 任务一阻塞直到任务二完成
\
dispatcher_a: --------X 任务二阻塞直到任务一完成
```
- 在串行任务分发器A分发的任务中,用其它分发器同步分发任务,在该任务中又用A同步分发任务,导致死锁
```
dispatcher_a: ------ 任务一阻塞直到任务二完成
\
dispatcher_b: ----- 任务二阻塞直到任务三完成
\
dispatcher_a: -----X 任务三阻塞直到任务一完成
```
---

### 题解
- 在某个串行任务分发器分发的任务中,经过数次同步分发,最终又用该任务分发器同步分发任务,导致死锁
```
dispatcher_a: ---- 任务一阻塞直到任务二完成
\
dispatcher_b: ---- 任务二阻塞直到任务三完成
\
dispatcher_c: ---- 任务三阻塞直到任务四完成
\
dispatcher_a: ---X 任务四阻塞直到任务一完成
```
- 用专有任务分发器在专有线程上同步分发任务,极易引发死锁
---

### 15. UI线程上的任务默认以________优先级运行。
__A)__ HIGH
__B)__ DEFAULT
__C)__ LOW
__D)__ NONE
### 答案:A
---

### 题解
###### 线程的优先级

###### 为了使应用具有更好的响应性,在UI线程上运行的任务默认以高优先级(HIGH)运行
---

### 16. 一个EventHandler可以与________个EventRunner绑定。在一个EventRunner上可以创建________个EventHandler。
__A)__ 一,一
__B)__ 多,多
__C)__ 多,一
__D)__ 一,多
### 答案:D
---

### 题解
- 每一个EventHandler都与一个由EventRunner创建的线程绑定,该线程内部有一个事件队列
- EventHandler可以向事件队列投递InnerEvent事件或Runnable任务
- EventRunner从事件队列中循环地取出事件
- 如果取出是InnerEvent事件,则在EventRunner所在线程执行EventHandler的processEvent()方法
- 如果取出的是Runnable任务,则在EventRunner所在线程执行Runnable的run()方法
- EventHandler只能与EventRunner创建的线程绑定
- 一个EventHandler只能与一个EventRunner绑定,一个EventRunner可以同时绑定多个EventHandler
---

### 17. 使用轻量级偏好数据库保存数据,flush()用于同步写入,flushSync()用于异步写入。
### 答案:错误
---

### 题解
- 将Preferences实例异步写入文件
- void flush();
- 将Preferences实例同步写入文件
- boolean flushSync();
---

### 18. 关系型数据库和对象关系映射数据库的底层都是基于SQLite数据库。
### 答案:正确
---

### 题解
- HarmonyOS关系型数据库提供了一套完整的针对本地数据库的管理机制,对外
提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite的所有
数据库特性,如事务、索引、视图、触发器、外键、参数化查询、预编译SQL等
- HarmonyOS对象关系映射(Object Relational Mapping,ORM)数据库是一款基于SQLite的数据库框架,屏蔽了底层SQLite数据库的SQL操作,针对实体和关系提供了增删改查等一系列面向对象接口。应用开发者无需编写复杂的SQL语句,完全以对象的形式操作数据库,聚焦业务逻辑,提升开发效率
---

### 19. 以下哪种数据库可以直接运行输入的SQL语句?
__A)__ 关系型数据库
__B)__ 对象关系映射数据库
__C)__ 轻量级偏好数据库
__D)__ 分布式数据服务
### 答案:A
---

### 题解

###### HarmonyOS关系型数据库提供了一套完整的针对本地数据库的管理机制,对外
提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite的所有
数据库特性,如事务、索引、视图、触发器、外键、参数化查询、预编译SQL等
---

### 20. 访问网络需要申请________权限。
__A)__ ohos.permission.INTERNET
__B)__ ohos.permission.CAMERA
__C)__ ohos.permission.NETWORK
__D)__ ohos.permission.ACCESS_NET
### 答案:A
---

### 题解
- 使用网络管理模块的相关功能时,需要请求相应的权限:
权限名|权限描述
-|-
ohos.permission.GET_NETWORK_INFO|获取网络连接状态
ohos.permission.SET_NETWORK_INFO|修改网络连接状态
ohos.permission.INTERNET|打开网络套接字,建立连接,访问网络
---

### 21. 访问网络需要动态申请权限。
### 答案:错误
---

### 题解
- 网络访问权限“ohos.permission.INTERNET”不是敏感权限,在config.json文件中声明即可,无需动态申请
```json
"reqPermissions": [
{
"name": "ohos.permission.INTERNET",
}
]
```
---

### 22. 通过________可以获得网络管理对象。
__A)__ `OkHttpUtil.build()`
__B)__ `NetManager.getInstance()`
__C)__ `NetManager.INSTANCE`
__D)__ `new OkHttp.builder()`
### 答案:B
---

### 题解

###### 网络管理类
---

### 23. DEBUG级别的HiLog日志需要打开USB调试模式才能输出。
### 答案:正确
---

### 题解

###### DEBUG级别的日志仅用于调试,默认不输出,如欲输
出需要在设备的“开发人员选项”中打开“USB调试”开关
---

### 24. 通过________方法可以判断当前应用是否已被授予特定的权限。
__A)__ verifySelfPermission()
__B)__ canRequestPermission()
__C)__ requestPermissionFromUser()
__D)__ onRequestPermissionFromUserResult()
### 答案:A
---

### 题解

###### 敏感权限申请流程
---

### 题解

###### 敏感权限申请示例
---

### 25. 使用位置能力需要申请________权限。该权限属于敏感权限,需要动态申请。
__A)__ LOCATION
__B)__ GPS
__C)__ 北斗
__D)__ ADDRESS
### 答案:A
---

### 题解

###### 获取位置信息一般处理流程
---

### 26. DevEco Studio提供的调试工具不包括________。
__A)__ ADB
__B)__ Previewer
__C)__ Simulator
__D)__ Remote Emulator
### 答案:A
---

### 题解
Debug Tools|Phone|Tablet|Car|TV|Wearable|Lite Wearable|Smart Vision
:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:
Previewer|●|●|●|●|●|●|●
Simulator||||||●|●
Remote Emulator|●|●|●|●|●||
Local Emulator|●|||●|●||
Remote Device|●|||●|●||
Local Device|●|●|●|●|●|●|●
---

### 27. 在Previewer中预览JS应用,可以看,但不能与应用交互,如点击、滑动等。
### 答案:错误
---

### 题解

###### 借助Previewer(预览器)查看Java应用和JS应用的界面效果
实时预览,保存源代码,即可在预览器中实时看到运行效果
动态预览,在预览器中,通过点击、滑动等操作与应用交互
---

### 28. DevEco Studio支持调试的代码类型不包括________。
__A)__ Java
__B)__ JS
__C)__ C/C++
__D)__ Python
### 答案:D
---

### 题解
- HarmonyOS的应用框架层包括用户程序框架、元能力框架和UI框架
- 用户程序框架和元能力框架支持Java、JS和C/C++语言
- UI框架支持Java和JS语言,即Java UI框架和JS UI框架
- HarmonyOS目前没有提供对Python语言的任何支持
---

### 29. 在HarmonyOS自带的数据库中,________可以提供轻量级的键值操作。
### 答案:轻量级偏好数据库
---

### 题解

###### 轻量级偏好数据库是一种非关系型数据库,与关系型数据库不同,它不保证遵循ACID
特性,也不采用关系模型组织数据,而是以键值对的形式保存数据项,类似于Java中
的Map,数据项之间无关系,易扩展,适合于保存那些经常被访问且数量不多的数据
---

### 30. Java UI框架中的________布局可以支持组件的水平或垂直排布。
### 答案:DirectionalLayout
---

### 题解

###### 方向布局(DirectionalLayout)用于将一组组件按照水平或垂直(默认)方
向排列。其orientation属性决定内部组件的排列方向,alignment属性则用
于确定水平布局中组件的垂直对齐方式,或垂直布局中组件的水平对齐方式
---

### 31. 在Java UI框架中,通过XML文件描述的页面布局,不能在代码中修改。
### 答案:错误
---

### 题解
- Java UI框架提供了两种编写布局的方式:
- 在Java代码中创建布局及其内部组件,并为其设置属性
- 在XML文件中按层级结构描述UI组件树,并为其设置属性
- 以上述两种方式创建的布局没有本质差别,通过XML文件描述的页面布局,加载后同样可以在Java代码中修改
---

### 32. 为了使用HarmonyOS的位置能力,只要在config.json文件中申请即可。
### 答案:错误
---

### 题解

###### 使用位置能力需要申请LOCATION权限。该权限属于敏感权限,不仅要在
config.json中显式声明,还要在代码中动态申请,运行时弹框,征询授权
---

### 33. HarmonyOS应用的主线程又称________线程。
### 答案:UI
---

### 题解

###### 在启动应用时,系统会创建一个称为“主线程”的执行过程。默认情况下,所有操作都在主
线程上执行。UI界面的显式、更新等操作,都在主线程上执行,因此主线程又称为UI线程
---

### 34. 在HarmonyOS系统架构中,分布式数据管理模块属于________层。
### 答案:系统服务
---

### 题解

###### 在HarmonyOS系统架构中,分布式数据管理模块属于系统服务层
---

### 35. 视频播放过程中,帧速率的单位是________,主要影响________,位速率的单位是________,主要影响________。
### 答案:赫兹,流畅性,位每秒,清晰度
---

### 题解

###### 帧速率是指每秒钟渲染静态画面的帧数,单位为赫兹。要达到平滑连贯的视觉效果,帧速
率不应低于8。电影级画质的帧速率一般在24以上。捕捉动态视频内容,帧速率愈高愈好
---

### 题解

###### 位速率是指每秒钟处理二进制数据的位数,单位为位每秒。位速率=分辨率×像素
深度×帧速率×压缩比。在分辨率、像素深度和帧速率都相同的前提下,压缩程度
越低,压缩比越高,位速率就越高,结果就是清晰度更高,画质更好,反而反之
---

### 36. 在HarmonyOS中,关系型数据库和对象关系映射数据库的主要区别是,前者可以通过SQL语句直接访问,而后者却不可以。
### 答案:正确
---

### 题解

###### 关系型数据库通过SQL语句访问数据库中的数据,而对象关系映射(ORM)数据库则在
关系型数据库的基础上做了更高级的封装,以完全面向对象的方式访问数据库中的数据
---

### 37. Intent对象的主要功能是在Ability和AbilitySlice之间传递数据。
### 答案:正确
---

### 题解

###### Intent是对象之间传递信息的载体。当一个Ability需要启动另一个Ability,或一个AbilitySlice
需要导航至另一个AbilitySlice时,可以通过Intent指定启动或导航的目标,并携带必要的参数
---

### 38. 在JS UI框架中实现页面跳转,需要在源页面中调用________对象的________方法,并在其________参数中指明目标页面。
### 答案:router,replace,uri
---

### 题解
- router.push():入栈
```
| |
| |
| |
| |
|---------|
| index | <- 显示
|_________|
|
| router.push({uri: "pages/secondary/secondary"}); // 入栈
| router.push({uri: "pages/tertius/tertius"}); // 入栈
v
```
---

### 题解
- router.back():出栈
```
|---------|
| tertius | <- 显示
|---------|
|secondary|
|---------|
| index |
|_________|
|
| router.back(); // 出栈
v
```
---

### 题解
- router.replace():先出栈再入栈
```
| |
| |
|---------|
|secondary| <- 显示
|---------|
| index |
|_________|
|
| router.replace({uri: "pages/tertius/tertius"}); // 先出栈再入栈
v
```
---

### 题解
- router.clear():清除栈顶以下
```
| |
| |
|---------|
| tertius | <- 显示
|---------|
| index |
|_________|
|
| router.clear(); // 清除栈顶以下
v
```
---

### 题解
- 用户看见的永远都是栈顶页面,即当前页面
```
| |
| |
| |
| |
|---------|
| tertius | <- 显示
|_________|
```
- 跳转的同时还可传递参数,如:
- `router.push({uri: "pages/secondary/secondary", params: {name: "张飞"}});`
- `route.replace({uri: "pages/tertius/tertius", params: {age: 30}});`
---

### 39. PageA中包含Slice1和Slice2,默认显示Slice1。如果想从PageB的某个Slice跳转到PageA的Slice2,需要执行以下哪些步骤?
__A)__ 在PageB的Intent中设置action
__B)__ 在PageA中通过addActionRoute()方法为Slice2添加路由
__C)__ 在PageB中通过addActionRoute()方法为Slice2添加路由
__D)__ 在配置文件中注册PageA的Slice2
### 答案:ABD
---

### 题解

###### 虽然一个PageAbility可以包含多个AbilitySlice,但是当PageAbility进入前台时屏幕上只
显示一个AbilitySlice。默认显示的AbilitySlice是通过setMainRoute()方法指定的。如果
需要更改默认显示的AbilitySlice,可以通过addActionRoute()方法为该AbilitySlice配置
一条路由规则。addActionRoute()方法中使用的动作名,需要在config.json文件中注册
---

### 40. 在体育赛事的直播过程中,多台运动相机共同参与对一个连贯动作的直播。这主要体现了HarmonyOS的哪个分布式特性?
__A)__ 分布式应用协同
__B)__ 分布式任务调度
__C)__ 分布式设备虚拟化
__D)__ 分布式数据管理
### 答案:C
---

### 题解

###### 基于分布式设备虚拟化技术,可以实现不同设备间的资源融合、设备管理和数据
处理。多种设备共同形成一个超级虚拟终端。针对不同类型的任务,为用户匹配
并选择能力合适的执行硬件,让业务连续地在不同设备间流转,充分发挥不同设
备的能力优势,如显示能力、摄像能力、音频能力、交互能力以及传感器能力等
---

### 41. 在HarmonyOS应用中,所有可视界面元素都是从哪些基类派生的?
__A)__ ComponentContainer
__B)__ AbilitySlice
__C)__ Component
__D)__ Ability
### 答案:AC
---

### 题解
- 应用中的所有UI元素都是Component或ComponentContainer的直接或间接子类对象
- Component是屏幕上的可绘制对象
- 文本、按钮、图片、列表······
- ComponentContainer是容纳其它Component和ComponentContainer的容器
- 方向布局、相对布局、表格布局、栈布局、自适应布局、位置布局······
- 未被添加到布局中的组件既无法显示也无法交互,一个用户界面至少包含一个布局
- 各种布局把Component和ComponentContainer组织成树状结构,谓之组件树
---

### 42. Java UI框架中,通过哪个参数可以设置Image组件的缩放方式?
__A)__ image_scale
__B)__ scale_mode
__C)__ image_zoom
__D)__ zoom_mode
### 答案:B
---

### 题解
###### 图像组件(Image)的缩放方式属性(scale_mode)用于指
定当图片与图像组件的大小不一致时以何种方式缩放图片
---

### 题解
###### ``

###### 保持纵横比缩放图片,在一个方向上恰好充满图像组件,而在另
一个方向上又不超出图像组件的边界,图片与图像组件始端对齐
---

### 题解
###### ``

###### 保持纵横比缩放图片,在一个方向上恰好充满图像组件,而在另
一个方向上又不超出图像组件的边界,图片与图像组件中心对齐
---

### 题解
###### ``

###### 保持纵横比缩放图片,在一个方向上恰好充满图像组件,而在另
一个方向上又不超出图像组件的边界,图片与图像组件末端对齐
---

### 题解
###### ``
###### 在两个方向上自由拉伸图片,使之充满整个图像组件
---

### 题解
###### ``

###### 不做任何缩放,图片与图像组件中心对齐,超出部分被裁剪
---

### 题解
###### ``

###### 保持纵横比缩小图片,在一个方向上恰好充满图像组件,而在另
一个方向上又不超出图像组件的边界,图片与图像组件中心对齐
---

### 题解
###### ``

###### 保持纵横比缩放图片,在一个方向上恰好充满图像组件,而在另一个方向上可以超
出图像组件的边界,但不能留有空白,图片与图像组件中心对齐,超出部分被裁剪
---

### 43. 从后台恢复一个Page Ability,会触发哪些生命周期回调?
__A)__ onBackground()
__B)__ onInActive()
__C)__ onForeground()
__D)__ onActive()
### 答案:CD
---

### 题解

###### 后台态-onForeground()→无焦态-onActive()→有焦态
---

### 44. 在UI线程上运行的任务,其默认优先级是什么?
__A)__ LOW
__B)__ MEDIUM
__C)__ HIGH
__D)__ DEFAULT
### 答案:C
---

### 题解
###### 线程的优先级

###### 为了使应用具有更好的响应性,在UI线程上运行的任务默认以高优先级(HIGH)运行
---

### 45. config.json中的哪个字段表示应用的自定义权限?
__A)__ defPermissions
__B)__ permissions
__C)__ reqPermissions
__D)__ customPermissions
### 答案:A
---

### 题解
- 若系统预定义权限无法满足应用对权限的特殊需求,可通过config.json文件module对象的defPermissions属性添加自定义权限,每个权限包含三个基本属性:
- name:权限名,为了避免冲突,建议以包名的前两个字段开头
- grantMode:授权方式
- system_grant:系统授权
- user_grant:用户授权
- availableScope:开放范围
- restricted:需要特定证书才能获得授权
- signature:与定义方签名一致即可获得授权
- privileged:只有特权应用可以获得授权
---

### 题解

---

### 46. 在HarmonyOS中,所有分布式特性的基础技术是什么?
__A)__ 分布式设备虚拟化
__B)__ 分布式软总线
__C)__ 分布式数据管理
__D)__ 分布式任务调度
### 答案:B
---

### 题解

###### 分布式软总线是手机、平板、智能穿戴、智慧屏、车机等分布式设备的通信基座,为设
备之间的互联互通提供了统一的分布式通信能力,为设备之间的无感发现和零等待传输
创造了条件。开发者只需专注于业务逻辑的实现,无需关心具体的组网方式和底层协议
---

### 47. 在记事本应用中,当用户结束编辑并点击保存按钮后,为了显示保存成功,使用哪种对话框最为合适?
__A)__ ListDialog
__B)__ PromptDialog
__C)__ CommonDialog
__D)__ ToastDialog
### 答案:D
---

### 题解

###### ToastDialog是在窗口上方弹出的对话框,通常作为通知操作的简单反馈。
ToastDialog会在一段时间后被自动关闭,在此期间用户仍能与界面互动。
---

### 48. 在使用任务分发器分发任务时哪种分发方法可能导致死锁?
__A)__ 异步分发
__B)__ 成组分发
__C)__ 同步分发
__D)__ 异步延迟分发
### 答案:C
---

### 题解

###### 调用syncDispatch()方法同步分发任务,分发者会在当前线程等待任务完成,在所分发任
务完成以前,syncDispatch()方法不返回。因此如果对同步分发使用不当,极易导致死锁
---

### 题解
- 在某个串行任务分发器分发的任务中,又用该任务分发器同步分发任务,导致死锁
```
dispatcher_a: --------- 任务一阻塞直到任务二完成
\
dispatcher_a: --------X 任务二阻塞直到任务一完成
```
- 在串行任务分发器A分发的任务中,用其它分发器同步分发任务,在该任务中又用A同步分发任务,导致死锁
```
dispatcher_a: ------ 任务一阻塞直到任务二完成
\
dispatcher_b: ----- 任务二阻塞直到任务三完成
\
dispatcher_a: -----X 任务三阻塞直到任务一完成
```
---

### 题解
- 在某个串行任务分发器分发的任务中,经过数次同步分发,最终又用该任务分发器同步分发任务,导致死锁
```
dispatcher_a: ---- 任务一阻塞直到任务二完成
\
dispatcher_b: ---- 任务二阻塞直到任务三完成
\
dispatcher_c: ---- 任务三阻塞直到任务四完成
\
dispatcher_a: ---X 任务四阻塞直到任务一完成
```
- 用专有任务分发器在专有线程上同步分发任务,极易引发死锁
---

### 49. HarmonyOS网络管理模块主要提供哪些功能?
__A)__ 数据连接管理
__B)__ 数据网络管理
__C)__ 数据流量统计
__D)__ 本地套接字
### 答案:ABCD
---

### 题解
- HarmonyOS的网络管理模块主要提供以下功能:
- 数据连接管理:绑定网卡、打开URL、查询数据链路参数
- 数据网络管理:指定数据网络传输、查询数据网络状态、响应数据网络变更
- 流量统计、HTTP缓存管理、创建本地套接字
---

### 50. 在协同办公应用中,将手机上的文档投射到智慧屏,并在智慧屏上对文档进行翻页、缩放等操作。这里用到了HarmonyOS的哪些分布式能力?
__A)__ 分布式设备虚拟化
__B)__ 分布式软总线
__C)__ 分布式文件服务
__D)__ 分布式数据服务
### 答案:BC
---

### 题解

###### 借助分布式文件服务可在多台设备间分享文件
---

### 51. 在开发HarmonyOS手机应用时,可以使用哪些编程语言?
__A)__ JavaScript
__B)__ C/C++
__C)__ Java
__D)__ PHP
### 答案:AC
---

### 题解
- HarmonyOS的应用框架层包括用户程序框架、元能力框架和UI框架
- 用户程序框架和元能力框架支持Java、JS和C/C++语言
- UI框架支持Java和JS语言,即Java UI框架和JS UI框架
- HarmonyOS目前没有提供对PHP语言的任何支持
---

### 52. JS UI框架为应用开发者提供了哪几类组件?
__A)__ 容器组件
__B)__ 画布组件
__C)__ 基础组件
__D)__ 媒体组件
### 答案:ABCD
---

### 题解

###### JS UI常用组件
---

### 53. 在HarmonyOS中,哪些数据库没有使用SQLite作为持久化存储引擎?
__A)__ 关系型数据库
__B)__ 对象关系映射数据库
__C)__ 轻量级偏好数据库
__D)__ 分布式数据服务
### 答案:CD
---

### 题解

###### 只有关系型数据库和对象关系映射(ORM)数据库使用SQLite作为持久化存储引擎,包括
轻量级偏好数据库和分布式数据库等在内的其它数据库,不以SQLite作为持久化存储引擎
---

### 54. HarmonyOS一共提供了几种任务分发方法?
__A)__ 同步分发
__B)__ 异步分发
__C)__ 异步延迟分发
__D)__ 成组分发
### 答案:ABCD
---

### 题解
###### 同步分发:分发任务并在当前线程等待任务执行完成。在所分发任务执行完
成前,分发方法不会返回,当前线程被阻塞。如若使用不当,极易导致死锁

###### 异步分发:分发任务并立即返回,返回值是一个可被用于取消该任务的接口

---

### 题解
###### 异步延迟分发:分发任务并立即返回,返回值是一个可被用于取消该任务的
接口。系统内部会在指定延迟时间后将该任务分发到相应队列中。延迟时间
仅代表任务被加入到队列中的时间,任务开始被执行的时间可能会晚于这个
时间,具体晚多久,既与队列的长度有关,也与内部线程池的繁忙程度有关

###### 成组分发:先创建任务组,再将任务加入任务组并立即返回,返回值是一个
可被用于取消该任务的接口。可以指定组内任务执行完以后执行的终结任务

---

### 55. 在处理页面跳转时,需要为Intent提供哪些信息?
__A)__ DeviceId
__B)__ BundleName
__C)__ AbilityName
__D)__ Action
### 答案:ABCD
---

### 题解

###### Intent是对象之间传递信息的载体。当一个Ability需要启动另一个Ability,或一个AbilitySlice
需要导航至另一个AbilitySlice时,可以通过Intent指定启动或导航的目标,并携带必要的参数
---

### 56. HarmonyOS一共提供了几种任务分发器?
__A)__ 全局并发任务分发器
__B)__ 并发任务分发器
__C)__ 串行任务分发器
__D)__ 专有任务分发器
### 答案:ABCD
---

### 题解

---

### 57. JS UI框架包括哪几层?
__A)__ 应用层
__B)__ 前端框架层
__C)__ 引擎层
__D)__ 平台适配层
### 答案:ABCD
---

### 题解

---

### 题解
- 应用层(Application):开发者使用JS UI框架开发的FA应用
- 前端框架层(Framework):前端页面解析、MVVM(Model-View-ViewModel)开发模式、页面路由、自定义组件
- 引擎层(Engine):动画解析、DOM(Document Object Model)树构建、布局计算、渲染命令构建与绘制、事件管理
- 平台适配层(Porting Layer):平台抽象,借助抽象接口对接系统平台,如事件对接、渲染管线对接、系统生命周期对接等
---

### 58. config.json的一级目录有哪些?
__A)__ package
__B)__ app
__C)__ deviceConfig
__D)__ module
### 答案:BCD
---

### 题解

---

### 59. 某开发者意图在基于Java UI框架的应用中,实时跟踪位置信息,代码如下:
```java
private Locator locator;
private LocatorCallback callback;
...
locator = new Locator(this);
RequestParam param = new RequestParam(RequestParam.SCENE_NAVIGATION);
callback = new LocatorCallback() {
@Override
public void ________(Location location) {
getUITaskDispatcher().asyncDispatch(() -> {
txtLongitude.setText(String.valueOf(location.getLongitude()));
txtLatitude.setText(String.valueOf(location.getLatitude()));
});
}
...
};
locator.________(param, callback);
```
---

### 请补全横线处的代码:
### 答案:`onLocationReport`,`startLocating`
---

### 题解

---

### 60. 某开发者意图在基于JS UI框架的应用中,实时跟踪位置信息,代码如下:
```js
import geolocation from '@system.geolocation';
export default {
data: {
entries: [{label: "经度", value: ""}, {label: "纬度", value: ""}]
},
onInit() {
geolocation.________({success: this.onSuccess, fail: this.onFail});
},
onSuccess(location) {
this.entries[0].value = location.longitude;
this.entries[1].value = location.latitude;
},
onFail(desc, code) {
this.entries[0].value = "ERROR-" + code;
this.entries[1].value = "ERROR-" + code;
},
onDestroy() {
geolocation.________();
}
}
```
---

### 请补全横线处的代码:
### 答案:`subscribe`,`unsubscribe`
---

### 题解
- JS UI框架传感器编程的一般模式:订阅、成功回调、失败回调、退订
```js
export default {
...
onInit() {
传感器.订阅({
success: function(ret) { /* 成功回调 */ },
fail: function(data, code) { /* 失败回调 */ }
});
},
...
onDestroy() {
传感器.退订();
}
...
}
```
---

# 更多资源
---

### HarmonyOS官网:https://www.harmonyos.com/
### HarmonyOS应用开发官网:https://developer.harmonyos.com/
### OpenHarmony开源项目:https://gitee.com/openharmony/
### 华为人才在线:https://e.huawei.com/cn/talent/portal/#/
### HCIA-HarmonyOS Application Developer认证官网:https://e.huawei.com/cn/talent/#/cert/product-details?certifiedProductId=481&authenticationLevel=CTYPE_CARE_HCIA&technicalField=PSC&version=1.0
### 资料下载中心:https://e.huawei.com/cn/talent/#/resources/
---

# 鸿蒙初辟本无性,打破顽冥须悟空
###### 预祝大家顺利通过HCIA-HarmonyOS Application Developer认证考试
##
