赞
踩
注:有读者反馈,题库的代码块比较多,打开文章时会卡死。所以笔者将题库拆分,以20道题为一组,题库目录如下,读者可以按需跳转。如果对您的阅读产生不便,笔者在这里向大家说声抱歉,请各位读者原谅。该题库已整理完毕,笔者不再更新。笔者连续考了三次,都过了,所以答案应该没什么太大问题。有需要题库文档的可以自取。祝各位读者好运(๑¯ω¯๑)。如果各位读者有什么内推的工作机会,也可以悄悄告诉笔者,笔者不胜受恩感激
1、在开发过程中,我们可以将每个功能模块作为一个独立的Module进行开发。关于Module,下列选项说法正确的是?
A、feature类型的Module:应用的动态特性模块,编译后生成feature类型的HAP。一个应用中可以包含一个或多个feature类型的HAP,也可以不包含。
B、Shared Library:动态共享库。HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。
C、Static Library:静态共享库。HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝。
D、entry类型的Module:应用的主模块,包含应用的入口界面、入口图标和主功能特性,编译后生成entry类型的HAP。每一个应用分发到同一类型的设备上的应用程序包,可以包含一个或多个entry类型的HAP。
应用程序包概述-应用程序包基础知识-开发基础知识-基础入门 | 华为开发者联盟 (huawei.com)
2、某业务团队发现用户对他们App的某个特性使用率并不高,为了节省用户首次下载安装包的体积,考虑将该特性做成按需加载,那么推荐该特性使用的工程模块类型是?
A、hap
B、app
C、hsp
D、har
3、哪些是持续部署最佳实践?
A、监控和回滚机制:实时监控部署后的应用状态,如有问题及时回滚。
B、自动化部署流程:从代码提交到部署的整个流程应尽可能自动化。
C、手工部署:持续部署可以采用手工部署的方式发布软件:
1、有一份非常详尽的文档,该文档描述了执行步骤及每个步骤中易出错的地方;
2、以手工测试来确认该应用程序是否运行正确;
3、在发布时,常常会修正一些在发布过程中发现的问题。
D、灰度发布:先在小部分用户或区域进行部署,观察没问题后再全面推广。
E、开发完成之后再向类生产环境部署:当软件被第一次部署到类生产环境(比如试运行环境)时,就是大部分开发工作完成时,至少是开发团队认为“该软件开发完成了”。
F、手工配置管理:
1、直接修改生产环境上的配置来改变系统配置;
2、集群中各节点的行为有所不同;
3、靠人手工恢复环境。手动记载配置包括操作系统、应用服务器、关系型数据库管理系统、Web服务器或其他基础设施设置。
G、环境一致性:保持开发、测试、生产等环境的高度一致性。
4、以下代码片段哪几处违反了ArkTS语法规范。
class Point {
public x: number
public y: number
constructor(x: number, y: number) {
this.x = x
this.y = y
}
}
let p = new Point(1.0, 1.0);
delete p.x;
p.z = 2.0;
p.x = 'Hello!';
A、let p = new Point(1.0, 1.0);
B、delete p.x;
C、p.z = 2.0;
D、p.x = 'Hello!';
5、以下napi代码有问题的是(不确定,把所有选项列出)
// A
static napi_value Demo(napi_env env, napi_callback_info info)
{
constexpr size_t arrSize = 1000;
napi_value arrBuffer = nullptr;
void *data = nullptr;
napi_create_arraybuffer(env, arrSize * sizeof(int32_t), &data, &arrBuffer);
int32_t *i32Buffer = reinterpret_cast<int32_t *>(data);
for (int i = 0; i < arrSize; i++) {
i32Buffer[i] = i;
}
return arrBuffer;
}
// B napi_ref g_ref = nullptr; /***** excute in main thread *****/ static napi_value DemoInMainThread(napi_env env, napi_callback_info info) { napi_value string = nullptr; napi_create_string_utf8(env, "bar", NAPI_AUTO_LENGTH, &string); napi_create_reference(env, string, 1, &g_ref); return string; } /***** excute in worker thread *****/ static napi_value DemoInWorkerThread(napi_env env, napi_callback_info info) { napi_value string = nullptr; napi_get_reference_value(env, g_ref, &string); napi_value object = nullptr; napi_create_object(env, &object); napi_set_named_property(env, object, "foo", string); return object; }
// C struct CallbackContext { napi_env env = nullptr; napi_ref callbackRef = nullptr; int32_t retData = 0; }; void callbackTest(CallbackContext *context) { uv_loop_s *loop = nullptr; napi_get_uv_event_loop(context->env, &loop); uv_work_t *work = new uv_work_t; context->retData = 1; work->data = (void *)context; uv_queue_work( loop, work, [](uv_work_t *work) {}, // using callback function back to JS thread [](uv_work_t *work, int status) { CallbackContext *context = (CallbackContext *)work->data; napi_value callback = nullptr; napi_get_reference_value(context->env, context->callbackRef, &callback); napi_value retArg; napi_create_int32(context->env, context->retData, &retArg); napi_value ret; napi_call_function(context->env, nullptr, callback, 1, &retArg, &ret); napi_delete_reference(context->env, context->callbackRef); if (work != nullptr) { delete work; } delete context; } ); }
// D static napi_value Demo(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value args[1] = {nullptr}; napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); napi_value sizeObj = nullptr; napi_handle_scope scope = nullptr; napi_open_handle_scope(env, &scope); napi_call_function(env, nullptr, args[0], 0, nullptr, &sizeObj); napi_close_handle_scope(env, scope); int64_t width = 0; napi_value result = nullptr; napi_get_element(env, sizeObj, 0, &result); napi_get_value_int64(env, result, &width); return result; }
A、A
B、B
C、C
D、D
6、下面关于混淆的描述正确的是
A、代码混淆已经被集成了到SDK中,可以在DevEco Studio中方便地使用。
B、针对工程源码的混淆可以降低工程被破解攻击的风险,缩短函数名、类名和属性名,减小应用的大小。
C、API10及以上版本的Stage模型、编译模式为release时,默认开启代码混淆功能;默认的混淆功能仅会混淆函数参数和局部变量的名称。
D、混淆支持ArkTS/TS/JS文件的混淆
代码混淆-ArkTS(方舟编程语言)-应用框架 | 华为开发者联盟 (huawei.com)
代码混淆-加固构建-编译构建-DevEco Studio | 华为开发者联盟 (huawei.com)
7、下面关于方舟字节码指令含义说明正确的是(不确定,把所有选项列出)
A、假设寄存器v0存放了对象A,累加器(acc)存放了对象B,那么执行指令"Ida v0"后,v0存放对象A,acc存放对象A
B、 假设寄存器v0存放了对象A,累加器(acc)存放了对象B,那么执行指令"Ida v0"后,v0存放对象B,acc存放对象B
C、假设寄存器v0存放了对象A,寄存器v1存放了对象B,那么执行指令"mov v0,v1"后,v0存放对象A,v1存放对象A
D、假设寄存器v0存放了对象A,寄存器v1存放了对象B,那么执行指令"mov v0,v1"后,v0存放对象B,v1存放对象B
8、下面关于ArkTS中import用法,正确的是
A、import { export1 as alias1 } from "ets file name";
B、import defaultExport from "ets file name"
C、import * as name from "ets file name"
D、import { export1 } from "ets file name";
9、以下关于ArkTS线程实例间传输实现方式描述正确的是(不确定,把所有选项列出)
import { taskpool, worker } from '@kit.ArkTS'; @Sendable class A {} let a: A = new A(); @Concurrent function foo(a: A) {} let task: taskpool.Task = new taskpool.Task(foo, a) let w = new worker.ThreadWorker("entry/ets/workers/Worker.ets") taskpool.execute(task).then(() => {}); w.postMessageWithSharedSendable(a); task.setCloneList([a]); taskpool.execute(task).then(() => {}); w.postMessage(a);
A、task.setCloneList([a]); taskpool.execute(task).then() => {});,TaskPool 共享传输实现方式
B、taskpool.execute(task).then(() => {});,TaskPool 共享传输实现方式
C、w.postMessage(a);,Worker 共享传输实现方式
D、w.postMessageWithSharedSendable(a);,Worker 共享传输实现方式
10、以下代码片段哪几个函数违反了ArkTS语法规范。
function foo1(value1?: number, value2: number) { if(value1 == undefined){ return value2; } return value1 + value2; } function foo2(value1: number, value2?: number) { if (value2 == undefined) { return value1; } return value1 + value2; } function foo3(value: number, ...arrary: number[]) { return value; } function foo4( ...arrary: number[], value: number) { return value; }
A、foo1
B、foo2
C、foo3
D、foo4
11、在ArkTS中,以下哪些属性的声明是正确的。
class C {
value1: number = 0;
value2?: number = null;
value3: number | undefined = undefined;
value4?: number;
}
A、value1
B、value2
C、value3
D、value4
12、如下ABC 3处手势,有机会执行的是哪几处?(不确定,把所有选项列出)
@Entry @Component struct ListTest { scroller: Scroller = new Scroller() scroller2: Scroller = new Scroller() scroller3: Scroller = new Scroller() private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] private childRecognizer: GestureRecognizer = new GestureRecognizer() private currentRecognizer: GestureRecognizer = new GestureRecognizer() private lastOffset: number = 0 build() { Stack({ alignContent: Alignment.TopStart }) { Scroll(this.scroller) { Column() { Text("Scroll Area") .width('90%') .height(150) .backgroundColor(0xFFFFFF) .borderRadius(15) .fontSize(16) .textAlign(TextAlign.Center) .margin({ top: 10 }) List({ space: 20, initialIndex: 0 }) { ForEach(this.arr, (item: number) => { ListItem() { Text('' + item) .width('100%') .height(100) .fontSize(16) .backgroundColor(Color.Blue) .textAlign(TextAlign.Center) .borderRadius(10) } }, (item: string) => item ) } .listDirection(Axis.Vertical) // 排列方向 .scrollBar(BarState.Off) .friction(0.6) .divider({ strokeWidth: 2, color: 0xFFFFF, startMargin: 20, endMargin: 20 }) //每行之间的分界线 .edgeEffect(EdgeEffect.None) // 边缘效果设置为Spring .height(1000) .width('90%') .id("inner") }.width('100%') } .id("outer") .height(600) .scrollable(ScrollDirection.Vertical) // 滚动方向纵向 .scrollBar(BarState.On) // 滚动条常驻显示 .scrollBarColor(Color.Gray) // 滚动条颜色 .scrollBarWidth(10) // 滚动条宽度 .edgeEffect(EdgeEffect.None) .onScroll((xOffset: number, yOffset: number) => { console.info(xOffset + ' ' + yOffset) }) .onScrollEdge((side: Edge) => { console.info('To the edge') }) .onScrollStop(() => { console.info('Scroll Stop') }) // A /*.gesture( TapGesture({ count: 2 }) .onAction((event: GestureEvent) => { if (event) { this.value = JSON.stringify(event.fingerList[0]) } }) )*/ // B /*.gesture( PanGesture({PanDirection.Vertical}) .onActionUpdate((event: GestureEvent)=>{ console.log("zcb onActionUpdate event offsetY " + event.offsetY + "this.lastOffset " + this.lastOffset) }) )*/ // C /*.parallelGesture( PanGesture({PanDirection.Vertical}) .onActionUpdate((event: GestureEvent)=>{ console.log("zcb onActionUpdate event offsetY " + event.offsetY + "this.lastOffset " + this.lastOffset) }) )*/ }.width('100%').height('100%').backgroundColor(0xDCDCDC) } }
A、NA
B、A
C、B
D、C
13、以下哪些实现方式可实现文本字号20的效果
// A
@Entry
@Component
struct Index {
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.SpaceBetween }) {
Text('This is the text with the height adaptive policy set')
.width('80%')
.height(90)
.minFontSize(20)
}.width('100%').height(250).padding({ left: 35, right: 35, top: 35 })
}
}
// B
@Entry
@Component
struct SpanExample {
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.SpaceBetween }) {
Text() {
Span('span letter spacing')
.letterSpacing(3)
.fontSize(20)
}.fontSize(30)
}.width('100%').height(250).padding({ left: 35, right: 35, top: 35 })
}
}
// C @Entry @Component struct Index { build() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.SpaceBetween }) { //文本水平方向对齐方式设置 //单行文本 Text('TextAlign set to Center.') .textAlign(TextAlign.Center) .fontSize(20) .border({ width: 1 }) .padding(10) .width('100%') }.height(600).width(350).padding({ left: 35, right: 35, top: 35 }) } }
// D import { LengthMetrics, LengthUnit } from '@ohos.arkui.node' @Entry @Component struct Index { fontStyleAttr: TextStyle = new TextStyle({fontSize:LengthMetrics.vp(20)}); mutableStyledString: MutableStyledString = new MutableStyledString("hello", [{ start: 0, length: 5, styledKey: StyledStringKey.FONT, styledValue: this.fontStyleAttr }]); controller: TextController = new TextController(); async onPageShow() { this.controller.setStyledString(this.mutableStyledString) } build() { Column() { //显示属性字符串 Text(undefined, { controller: this.controller }) }.width('100%') } }
A、A
B、B
C、C
D、D
14、依次点击A、B、C、D四个按钮,其中不会触发UI刷新的是:
@Entry @Component struct Index { @State count: number = 0; @State @Watch('onValueChange') value: number = 50; onValueChange() { this.count = this.value; } build() { Column() { Text(`${this.count}`) Button("A") .onClick(() => { this.count = 0; }) Button("B") .onClick(() => { for (let i = 0; i < 1000; i++) { this.count = i; } for (let i = 1000; i > 0; i--){ this.count = i; } this.count--; }) Button("C") .onClick(() => { this.value = 100; }) Button("D" ) .onClick(() => { setInterval(()=>{ this.count++; }, 1000) }) } } }
A、A
B、B
C、C
D、D
15、如何实现类似下图布局
// A @Entry @Component struct Demo { //忽略其他辅助代码 dataSource: ItemDataSource = new ItemDataSource(100) itemHeightArray: number[] = [] colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F] scroller: Scroller = new Scroller() aboutToAppear() { this.getItemSizeArray() } build() { Scroll() { Column() { Grid() { GridItem() { Text('GoodsTypeList') } .backgroundColor(this.colors[0]) GridItem() { Text('AppletService') } .backgroundColor(this.colors[1]) GridItem() { Text('ReloadData') } .backgroundColor(this.colors[2]) } .rowsGap(10) .columnsTemplate('1fr') .rowsTemplate('1fr 1fr 1fr') .width('100%') .height(100) .margin({ top: 10, left: 5, bottom: 10, right: 5 }) Grid() { LazyForEach(this.datasource, (item: number) => { GridItem() { //使用可复用自定义组件 ReusableItem({ item: item }) } .width('100%') .height(this.itemHeightArray[item % 100]) .backgroundColor(this.colors[item % 5]) }, (item: number) => '' + item + this.itemHeightArray[item % 100]) } .columnsTemplate("1fr 1fr") .columnsGap(10) .rowsGap(5) .width('100%') .nestedScroll({ scrollForward: NestedScrollMode.PARENT_FIRST, scrollBackward: NestedScrollMode.SELF_FIRST }) } } .scrollBar(BarState.Off) .edgeEffect(EdgeEffect.None) } }
// B @Entry @Component struct Demo { //忽略其他辅助代码 dataSource: ItemDataSource = new ItemDataSource(100) itemHeightArray: number[] = [] colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F] scroller: Scroller = new Scroller() @State sections: WaterFlowSections = new WaterFlowSections() sectionMargin: Margin = { top: 10, left: 5, bottom: 10, right: 5 } oneColumnSection: SectionOptions = { itemsCount: 3, crossCount: 1, rowsGap: 10, margin: this.sectionMargin, onGetItemMainSizeByIndex: (index: number) => { return this.itemHeightArray[index % 100] } } lastSection: SectionOptions = { itemsCount: 97, crossCount: 2, margin: this.sectionMargin, onGetItemMainSizeByIndex: (index: number) => { return this.itemHeightArray[index % 100] } } aboutToAppear() { this.setItemSizeArray() // 初始化瀑布流分组信息 let sectionOptions: SectionOptions[] = [] sectionOptions.push(this.oneColumnSection) sectionOptions.push(this.lastSection) this.sections.splice(0, 0, sectionOptions) } build() { WaterFlow({ scroller: this.scroller, sections: this.sections }) { LazyForEach(this.dataSource, (item: number) => { FlowItem() { ReusableFlowItem({ item: item }) } .width('100%') .backgroundColor(this.colors[item % 5]) }, (item: string) => item) } .columnsGap(10) .rowsGap(5) .backgroundColor(0xFAEEE0) .width('100%') .height('100%') } }
// C @Entry @Component struct Demo { //忽略其他辅助代码 dataSource: ItemDataSource = new ItemDataSource(100) itemHeightArray: number[] = [] colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F] scroller: Scroller = new Scroller() aboutToAppear() { this.getItemSizeArray() } build() { Column() { List({ scroller: this.scroller, space: 10 }) { ListItem(){ Grid() { GridItem() { Text('GoodsTypeList') }.backgroundColor(this.colors[0]) GridItem() { Text('AppletService') }.backgroundColor(this.colors[1]) GridItem() { Text('ReloadData') }.backgroundColor(this.colors[2]) } .rowsGap(10) .columnsTemplate('1fr') .rowsTemplate('1fr 1fr 1fr') .width('100%') .height(100) } ListItem() { WaterFlow(){ LazyForEach(this.datasource, (item: number, index: number) => { FlowItem() { //使用可复用自定义组件 ReusableItem({ item: item + index }) } .width('100%') .height(this.itemHeightArray[item % 100]) .backgroundColor(this.colors[item % 5]) }, (item: number) => '' + item + this.itemHeightArray[item % 100]) } .id('Waterflow') .columnsTemplate("1fr 1fr") .columnsGap(10) .rowsGap(5) .width('100%') .height('100%') .nestedScroll({ scrollForward: NestedScrollMode.PARENT_FIRST, scrollBackward: NestedScrollMode.SELF_FIRST }) } } .scrollBar(BarState.Off) .edgeEffect(EdgeEffect.None) } .width('100%') .padding({ left: 10, right: 10 }) } }
A、A === Grid
B、B
=== WaterFlow
C、C
=== List
16、Code Linter针对ArkTS/TS代码进行最佳实践/编程规范方面的检查,最佳实践/编程规范方面的检查规则可以配置,针对codelinter的配 置项一下哪些说法是正确的
A、rules:可以基于ruleSet配置的规则集,新增额外规则项,但是无法修改ruleSet中规则默认配置
B、files:配置待检查的文件名单,如未指定目录,规则适用于所有文件,例如: [“**/*.ets”,“**/*.js”,“**/*.ts”]。
C、ignore:配置无需检查的文件目录,其指定的目录或文件需使用相对路径格式,相对于code-linter.json5所在工程根目录,例如:build/**/*。
D、ruleSet:配置检查使用的规则集,规则集支持一次导入多条规则。
代码Code Linter检查-代码检查-代码编辑-DevEco Studio | 华为开发者联盟 (huawei.com)
17、一个应用通常会包含多种功能,将不同的功能特性按模块来划分和管理是一种良好的设计方式。在开发过程中,我们可以将每个功能模块作为一个独立的Module进行开发,下面关于Module的说法正确的是
A、Library类型的Module,用于实现代码和资源的共享,有两种类型,分别为Static Library和Shared Library两种类型。
B、entry类型的Module,是应用的主模块,一个应用只能包含唯一一个entry类型的HAP。
C、Ability类型的Module,用于实现应用的功能和特性,有两种类型,分别为entry和feature。
D、feature类型的Module,应用的动态特性模块,一个应用中可以包含一个或多个feature类型的模块,也可以不包
应用程序包概述-应用程序包基础知识-开发基础知识-基础入门 | 华为开发者联盟 (huawei.com)
18、在大型软件工程中,一般会伴随着多团队开发,各团队开发自己的业务模块,最后再由集成交付团队集成到一起,下面哪些是大型应用模块化开发最佳实践
A、避免用户首次下载应用耗时过长,及过多占用用户空间,不常用功能做成按需加载。
B、若多个模块依赖了不同版本的HAR,使用OHPM的overrides机制配置指定使用哪个版本的HAR,以减少包大小。
C、使用路由表进行模块间解耦。
D、一次上架多端部署。
19、通过如下openLink的接口启动,如下哪些配置的UIAbility不可能被拉起(不确定,把所有选项列出)
import { hilog } from '@kit.PerformanceAnalysisKit'; import { UIAbility, common, OpenLinkOptions } from '@kit.AbilityKit'; import { BusinessError } from '@kit.BasicServicesKit'; export default class MyAbility extends UIAbility { onForeground() { let link: string = "https://www.example.com" let openLinkOptions: OpenLinkOptions = { applinkingOnly: true, parameters: {demo_key: "demo_value"} }; try { this.context.openLink( link, openLinkOptions, (err, result) => { hilog.error(DOMAIN, TAG, 'openLink callback error.code:' + JSON.stringify(err)); } ).then(()=>{ hilog.info(DOMAIN, TAG, 'open link success.'); }).catch((err: BusinessError)=>{ hilog.error(DOMAIN, TAG, 'open link failed, errCode ' + JSON.stringify(err.code)); }) } catch (e) { hilog.error(DOMAIN, TAG, 'exception occured, errCode ' + JSON.stringify(e.code)); } } }
// A { "name": "TargetAbility", "skills": [ { "actions": [ "ohos.want.action.vieData", ], "entities": [ "entity.system.browsable", ], "uris": [ { "scheme": "http", "host": "www.test.com", "port": "8080", "path": "path" } ] } ] }
// B { "name": "TargetAbility", "skills": [ { "actions": [ "ohos.want.action.viewData", ], "entities": [ "entity.system.browsable", ], "uris": [ { "scheme": "https", "host": "www.test.com", "port": "8080", "path": "path", "autoVerify": ture } ] } ] }
// C { "name": "TargetAbility", "skills": [ { "actions": [ "ohos.want.action.sendData", ], "entities": [ "entity.system.browsable", ], "uris": [ { "scheme": "http", "host": "www.test.com", "port": "8080", "path": "path", "autoVerify": ture } ] } ] }
// D { "name": "TargetAbility", "skills": [ { "actions": [ "ohos.want.action.SendData", ], "entities": [ "entity.system.browsable", ], "uris": [ { "scheme": "https", "host": "www.test.com", "port": "8080", "path": "path", "autoVerify": ture } ] } ] }
A、A
B、B
C、C
D、D
20、某个应用的启动框架配置文件详细信息如下,以下说法正确的是:
{ "startupTasks": [ { "name": "StartupTask_001", "srcEntry": "./ets/startup/StartupTask_001.ets", "dependencies": [ "StartupTask_002", "StartupTask_003" ], "runOnThread": "taskpool", "waitOnMainThread": false }, { "name": "StartupTask_002", "srcEntry": "./ets/startup/StartupTask_002.ets", "dependencies": [ "StartupTask_004" ], "runOnThread": "taskpool", "waitOnMainThread": false }, { "name": "StartupTask_003", "srcEntry": "./ets/startup/StartupTask_003.ets", "runOnThread": "taskpool", "waitOnMainThread": false }, { "name": "StartupTask_004", "srcEntry": "./ets/startup/StartupTask_004.ets", "runOnThread": "taskpool", "waitOnMainThread": false }, { "name": "StartupTask_005", "srcEntry": "./ets/startup/StartupTask_005.ets", "runOnThread": "mainThread", "waitOnMainThread": true }, { "name": "StartupTask_006", "srcEntry": "./ets/startup/StartupTask_006.ets", "runOnThread": "mainThread", "waitOnMainThread": false, ”excludeFromAutoStart": true } ], "configEntry": "./ets/startup/StartupConfig.ets" }
A、StartupTask_005会在主线程执行
B、StartupTask_006会在AbilityStage的onCreate前初始化完成
C、StartupTask_001会在StartupTask_004之后执行;
D、StartupTask_003会在StartupTask_004之后执行
应用启动框架AppStartup-Stage模型应用组件-Stage模型开发指导-Ability Kit(程序框架服务)-应用框架 | 华为开发者联盟 (huawei.com)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。