期末考试复习总结-《应用程序框架基础》
一、知识点总结
1. 应用程序框架基础
- 框架概述:连接开发者与用户,提供进程管理、生命周期调度等能力,支持应用内交互、跨设备流转。
- Stage模型:
- 设计思想:支持跨端迁移、多端协同,UIAbility与UI分离,组件间共享ArkTS引擎实例。
- 核心特性:组件管理与窗口管理解耦,严格后台管控,支持多设备形态。
- 工程目录结构:
- ArkTS源码:存于
ets
目录,包括页面文件(如Index.ets
)和Ability组件(如EntryAbility.ets
)。 - 配置文件:
app.json5
:应用全局配置(Bundle名称、版本号)。module.json5
:模块配置(设备类型、组件信息、路由表)。
- 资源文件:分应用级(
AppScope/resources
)和模块级(module/resources
),包含图片、字符串等。
- ArkTS源码:存于
2. 应用程序包基础知识
-
多Module设计:
- Ability类型:生成HAP包,分为
entry
(主模块)和feature
(动态特性模块)。 - Library类型:生成HAR(静态)或HSP(动态)共享包,减少代码重复。
- Ability类型:生成HAP包,分为
-
包结构:
- 开发态:包含源码、配置、资源文件。
- 编译态:ArkTS编译为
.abc
,资源合并,配置文件整合。 - 发布态:打包为
.app
,含签名和pack.info
文件。
3. UIAbility组件概述
- 生命周期:
- 四大状态:Create(
onCreate
)、Foreground(onForeground
)、Background(onBackground
)、Destroy(onDestroy
)。 - WindowStage事件:
onWindowStageCreate
(加载页面)、onWindowStageDestroy
(释放资源)。
- 四大状态:Create(
- 启动模式:
singleton
(单实例,默认)、multiton
(多实例)、specified
(指定实例,需唯一Key)。
- 组件交互:
- 设备内启动:通过
startAbility
传递Want
参数。 - 数据同步:使用
EventHub
发布订阅事件。
- 设备内启动:通过
4. 案例:UIAbility与自定义组件生命周期
- UIAbility生命周期:涵盖Create到Destroy的状态转换。
- 自定义组件生命周期:
aboutToAppear
、onPageShow
、onPageHide
等。
二、思维导图
三、模拟考试题
1. 单选题(10题×3分=30分)
-
Stage模型的核心设计思想不包括( )
A. 跨端迁移
B. 组件实例共享
C. UI与逻辑耦合
D. 多端协同
答案:C -
应用全局配置文件是( )
A.module.json5
B.app.json5
C.build-profile.json5
D.oh-package.json5
答案:B -
UIAbility的默认启动模式是( )
A. multiton
B. specified
C. singleton
D. dynamic
答案:C -
用于组件间数据同步的是( )
A. EventHub
B. AppStorage
C. LocalStorage
D. Router
答案:A -
编译态时,ArkTS源码会生成( )
A. .abc文件
B. .hap文件
C. .app文件
D. .har文件
答案:A -
以下属于UIAbility生命周期的是( )
A. onPageShow
B. onWindowStageCreate
C. aboutToAppear
D. onBackPress
答案:B -
动态共享包的后缀是( )
A. .har
B. .hap
C. .hsp
D. .app
答案:C -
指定实例启动模式需传递( )
A. 唯一Key
B. 设备ID
C. 模块名称
D. 页面路径
答案:A -
资源文件中,应用级资源存放于( )
A.AppScope/resources
B.module/resources
C.ets/resources
D.src/main/resources
答案:A -
启动UIAbility并获取返回结果的方法是( )
A. startAbility
B. startAbilityForResult
C. terminateSelf
D. loadContent
答案:B
2. 判断题(10题×1分=10分)
-
Stage模型中,UIAbility与UI是分离的。( )
答案:√ -
module.json5
是应用全局配置文件。( )
答案:×(是模块配置文件) -
UIAbility的onDestroy回调用于释放资源。( )
答案:√ -
HAR是动态共享包,HSP是静态共享包。( )
答案:×(HAR是静态,HSP是动态) -
specified启动模式需要传递唯一标识Key。( )
答案:√ -
应用发布态打包为
.hap
文件。( )
答案:×(打包为.app
) -
EventHub用于UIAbility与UI的数据同步。( )
答案:√ -
multiton启动模式会复用已有实例。( )
答案:×(每次创建新实例) -
资源文件中,模块级资源优先级高于应用级。( )
答案:×(应用级优先) -
UIAbility冷启动时会重新加载资源。( )
答案:√冷启动的含义:UIAbility的冷启动是指应用或UIAbility从未启动过,或者已经被完全终止,再次启动时所经历的过程。在这种情况下,系统需要为UIAbility分配资源,包括内存、CPU时间等,同时加载应用所需的资源文件,如布局文件、图片、样式等。
方面 | 冷启动 | 热启动 |
---|---|---|
定义 | 应用或UIAbility从未启动过,或者已被完全终止,再次启动的过程。 | 应用或UIAbility已经在后台运行,再次进入前台的过程。 |
资源加载 | 完全重新加载资源,包括布局文件、图片、样式等。 | 不会重新加载资源,直接使用后台已加载的资源。 |
性能开销 | 性能开销较大,因为需要重新初始化和加载所有资源。 | 性能开销较小,因为资源已经在后台准备好,直接切换即可。 |
用户体验 | 用户可能会看到加载界面或白屏,启动时间较长。 | 用户体验更流畅,启动时间较短。 |
适用场景 | 应用首次安装后启动,或用户手动清除后台任务后再次启动应用。 | 用户将应用最小化后再次切换回应用。 |
资源状态 | 系统为UIAbility分配资源,加载所有资源文件。 | 使用后台已分配和加载的资源,无需重新加载。 |
数据保持 | 数据需要重新加载,之前的状态可能会丢失(除非有数据持久化机制)。 | 数据保持在后台,应用状态得以保留。 |
示例 | 用户关闭应用后重新打开,或者首次安装应用后首次打开。 | 用户在使用其他应用时,将当前应用最小化后再次切换回该应用。 |
3. 简答题(4题×5分=20分)
-
简述Stage模型的核心设计思想。
参考答案:- 支持应用组件级跨端迁移和多端协同;
- 多个组件共享ArkTS引擎实例,减少内存占用;
- UI与UIAbility分离,通过状态驱动UI更新;
- 组件管理与窗口管理解耦,支持多设备形态。
-
说明UIAbility的四大生命周期状态及对应回调。
参考答案:- Create:实例创建时触发
onCreate
,用于页面初始化; - Foreground:切前台时触发
onForeground
,申请资源; - Background:切后台时触发
onBackground
,释放资源; - Destroy:实例销毁时触发
onDestroy
,释放系统资源。
- Create:实例创建时触发
-
比较HAR与HSP共享包的区别。
参考答案:- HAR(静态):编译时复用,多包引用会重复拷贝,支持独立发布;
- HSP(动态):运行时复用,多包共享一份实例,减小包大小,随应用打包。
-
简述UIAbility间交互的设备内实现方式。
参考答案:- 使用
startAbility
传递Want
参数启动目标组件; - 通过
startAbilityForResult
获取返回结果; - 利用
EventHub
的发布订阅机制实现数据同步; terminateSelf
终止当前组件实例。
- 使用
4. 程序填空题(2题×10分=20分)
题目1:补全UIAbility加载页面的代码。
import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';export default class EntryAbility extends UIAbility {onWindowStageCreate(windowStage: window.WindowStage): void {windowStage.loadContent('______', (err) => { // 补全页面路径if (err) {console.error('加载页面失败');}});}
}
答案:pages/Index
题目2:补全EventHub事件订阅代码。
// 在UIAbility中
let eventhub = this.context.eventHub;
eventhub.on('event1', (data: string) => {console.info('接收到事件:' + ______); // 补全参数
});
答案:data
5. 编程题(2题×10分=20分)
题目1:编写代码实现UIAbility的singleton启动模式,并在onNewWant中更新数据。
参考代码:
// module.json5中配置
{"abilities": [{"name": "MainAbility","launchType": "singleton"}]
}// MainAbility.ets
export default class MainAbility extends UIAbility {@State data: string = '初始数据';onNewWant(want: Want, launchParam) {if (want.parameters?.newData) {this.data = want.parameters.newData; // 接收新数据}}
}
评分要点:启动模式配置、onNewWant回调、数据更新逻辑。
题目2:使用EventHub实现UI与UIAbility的数据通信,点击按钮触发事件。
参考代码:
// 在UIAbility中
onCreate() {this.context.eventHub.on('updateData', (data) => {console.info('接收到数据:' + data);});
}// 在UI组件中
Button('触发事件').onClick(() => {this.context.eventHub.emit('updateData', '新数据');})
评分要点:事件订阅(on)、事件触发(emit)、参数传递。