hiAppEvent提供的Watcher接口,()属性不配置,会导致编译报错,产生"ArkTSCompiler Error".
A. onReceive
B. triggerCondition
C. onTrigger
D.name
在ArkTs中以下哪些属性的声明是错误的
class c {}
let value1: number = null;
let value2: string lnull = null;
let value3:string undefined = null;
let value4:c= null
A. value4
B. value1
c. value3
D. value2
应用开发中使用的各类资源文件,需要放入特定子目录中存储管理,以下关于资源说法错误的是
A. stage模型多工程情况下,共有的资源文件放到AppScope下的resources目录。
B.resfile目录,应用安装后,resfile资源会被解压到应用沙箱路径,通过Context属性resourceDir获取
到resfile资源目录后,可通过文件路径访问。
C.rawfile目录,支持创建多层子目录,子目录名称可以自定义,文件夹内可以自由放置各类资源文件。目录中的资源文件会被编译成二进制文件,并赋予资源文件ID。
D.base目录是默认存在的目录,二级子目录element用于存放字符串、颜色、布尔值等基础元素,media、profile存放媒体、动画、布局等资源文件。
关于代码门禁理解正确的是
A.代码门禁是一项代码质量保障措施。目的是要求开发人员提交的代码必须满足一些要求才能合入代码仓库。门禁必须强制要求包括编译通过、单元测试覆盖率达标、代码静态检查无告警、全量功能测试用例、DFX专项测试都通过。
B.门禁级检查的范围和版本级检查的范围保持一致,尽可能多的在MR门禁阶段就拦截防护住问题,保障问题可以及时清理掉。
C. 构建是在代码合并后检查已提交代码的功能完整性,这种方法会导致代码合并到master后编译失败导致没有可用版本部署。通过提高滚动构建的频度就可以代替代码门禁,保障代码主干及时发现并解决问题。
D.代码门禁则是在代码合并之前就验证代码来保护主千分支的完整性。通过这种方式,可以保护主分支代码避免因合码导致的构建中断,以确保 master 分支代码始终是可部署的,并且不会因明显的错误而影响到你正在并行开发的同事工作。
一个应用项目工程中,模块依赖关系如下图所示,那么在最终编译结果.app文件中,存在的编译产物是:
A.A.hap + B.har + D.hsp
B.A.hap + B.har + C.har + D.hsp
C.A.hap + D.hsp + C.har
D.A.hap + D.hsp
应用程序开发调试过程中,经常需要安装新应用进行调测,下面安装应用操作错误的是
A. bm install -p ohosapp.hap
B. bm install-p /data/app/
C. bm install -p ohosapp.hap -r
D.hdc install-p ohosapp.hap
我们需要避免在逐帧调用的接口中执行耗时操作,下面哪个选项不属于上述的接口?
A. onTouch
B. aboutToReuse
C. onScroll
D.onAreaChange
一个应用有2个UIAbility组件,其module.json中abilities标签的配置如下方代码。
在手机设备上,执行如下操作后:
1.启动UIAbility1,然后back键返回销毁UIAbility1;
2.启动UIAbility2, 然后back键返回销毁UIAbility2;
3.启动UIAbility2, 然后back键返回销毁UIAbility2;
进入多任务列表,能看看到该应用的几个任务视图:
"abilities": [
{
"name": "UIAbility1",
"srcEntry": "./ets/entryability/Ability1.ets",
"description": "$string:EntryAbility_desc",
"icon": "$media:icon",
"label": "$string:Ability1_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"launchType": multiton
},
{
"name": "UIAbility2",
"srcEntry": "./ets/entryability/Ability2.ets",
"description": "$string:Ability2_desc",
"icon": "$media:icon",
"label": "$string:Ability2_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"launchType": singleton,
"removeMissionAfterTerminate":true
}
]
A.3个
B.0个
C.1个
D.2个
以下哪些赋值语句在ArkTS中是合法。
class C {}
let value1: number = null;
let value2: string | null = null;
let value3: string | undefined = null;
let value4: C = null
A.value2
B.value1
C.value4
D.value3
如何实现类似下图布局
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 })
}
}