鸿蒙面试题库收集(一):ArkTS&ArkUI-基础理论

2024-09-25  本文已影响0人  小小一颗卤蛋

收集官网faq:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs/faqs-arkui-kit-0000001769732210

一. ArkTS&ArkUI

1. 基础理论

1. 鸿蒙相关的生命周期都有哪些?

(1)UIAbility生命周期: onCreate、onWindowStageCreate、onForeground、onBackground、onWindowStageDestroy、onDestroy。

(2)页面生命周期:onPageShow、onPageHide、onBackPress。 页面生命周期,说白了就是@Entry修饰的组件,才称之为页面。

(3)组件生命周期:aboutToAppear(发起网络请求)、aboutToDisappear。

按返回键页面执行生命周期方法:

返回页面不走aboutToAppear:

问:aboutToAppear和onAppear的区别?

2. ArkUI的两大开发范式是什么,区别是什么

3. 项目使用的是harmoneyos还是openharmoney,区别是啥 ?

HarmonyOS:OpenHarmony+闭源应用和华为移动服务HMS(比如应用市场,视频,音乐等app)
Andoird:aosp(android open source project) + GMS(Google Mobile Service)

4. arkts中哪些类不能被继承, 面试官关注点是组件是否可以继承?(组件是否可以被继承)

组件不能被继承,被@compent修饰的自定义组件不能被继承,只能引用,或者对外暴露方法。

官网解释:

5.介绍Stage模型和FA模型

  1. Stage模型 : HarmonyOS 3.1推出 也就是API9 , 是目前==主推==且会长期演进的模型
    • 由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型
    • stage: 舞台 /steɪdʒ/
  2. FA模型: FA(Feature Ability)模型:HarmonyOS早期版本开始支持的模型,已经不再主推
    • feature: 特点 /ˈfiːtʃə(r)/
  3. 区别: Stage模型与FA模型最大的区别在于
    1. Stage模型中,多个应用组件共享同一个ArkTS引擎实例;
    2. 而FA模型中,每个应用组件独享一个ArkTS引擎实例。
    3. 因此在Stage模型中,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。
    4. Stage模型作为主推的应用模型,开发者通过它能够更加便利地开发出分布式场景下的复杂应用。

2. 装饰器

1. 你使用过哪些装饰器,分别阐述一下他们得作用

2. 有用过@Styles,@Extend,@Builder装饰器么?

3. 还用过其他装饰器么?

1. Provide和Consume
  1. @Provide和@Consume,用于祖先与后代组件的双向数据同步,实现跨层级传递

    • ==理解==:@Provide装饰器的变量是在祖先组件中,可以理解为被“提供”给后代的状态变量。@Consume装饰的变量是在后代组件中,去“消费”数据
  2. 语法特点:

    • @Provide和@Consume可以通过相同的变量名或者相同的变量别名绑定

      // 通过相同的变量名绑定
      @Provide a: number = 0; //祖先组件中定义
      @Consume a: number;  //子孙组件中定义
      
      // 通过相同的变量别名绑定
      @Provide('a') b: number = 0;//参数即为别名
      @Consume('a') c: number;
      
2. ObjectLink和Observed
3. Watch

概述

  1. @Watch应用于==对状态变量的监听==。如果开发者需要关注某个状态变量的值是否改变,可以使用@Watch为状态变量设置回调函数。
  2. @Watch用于监听状态变量的变化,当状态变量变化时,@Watch的回调方法将被调用

代码:

@Component
struct TotalView {
  @Prop @Watch('onCountUpdated') count: number = 0;
  @State total: number = 0;
  // 该函数是自定义组件的成员函数
  // @Watch 回调
  // propName是被watch的属性名
  // 多个状态绑定同一个@Watch回调时,通过propName区分到底是哪个状态改变了
  onCountUpdated(propName: string): void {
    this.total += this.count;
  }

  build() {
    Text(`Total: ${this.total}`)
  }
}

@Entry
@Component
struct CountModifier {
  @State count: number = 0;

  build() {
    Column() {
      Button('add to basket')
        .onClick(() => {
          this.count++
        })
      TotalView({ count: this.count })
    }
  }
}
上一篇 下一篇

猜你喜欢

热点阅读