惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
爱范儿
爱范儿
IT之家
IT之家
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
阮一峰的网络日志
阮一峰的网络日志
C
CERT Recently Published Vulnerability Notes
月光博客
月光博客
Cisco Talos Blog
Cisco Talos Blog
Google DeepMind News
Google DeepMind News
T
Tor Project blog
T
Tenable Blog
Forbes - Security
Forbes - Security
AI
AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
NISL@THU
NISL@THU
人人都是产品经理
人人都是产品经理
博客园 - 司徒正美
F
Full Disclosure
雷峰网
雷峰网
N
News and Events Feed by Topic
T
Threatpost
TaoSecurity Blog
TaoSecurity Blog
Simon Willison's Weblog
Simon Willison's Weblog
AWS News Blog
AWS News Blog
Hacker News: Ask HN
Hacker News: Ask HN
S
Secure Thoughts
S
Security @ Cisco Blogs
The Hacker News
The Hacker News
P
Palo Alto Networks Blog
P
Privacy International News Feed
H
Heimdal Security Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
V
Visual Studio Blog
C
Check Point Blog
Stack Overflow Blog
Stack Overflow Blog
B
Blog RSS Feed
有赞技术团队
有赞技术团队
B
Blog
Microsoft Security Blog
Microsoft Security Blog
S
Schneier on Security
T
Tailwind CSS Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Project Zero
Project Zero
T
The Exploit Database - CXSecurity.com
U
Unit 42
Jina AI
Jina AI

博客园 - 为敢技术

iConsole隐私政策 iConsole用户协议 iCapture隐私政策 iCapture用户协议 上传文件中的.DS_Store问题 iROM用户协议 iROM隐私政策 iConsole请求麦克风权限 博文阅读密码验证 - 博客园 创建图像分类器模型 DevEco Studio:在Windows电脑上启动模拟器,提示未开启Hyper-V iMac / MacBook设置U盘启动 RK3588开发板入门教程 DevEco Testing教程 DevEco Studio实用技巧 Mac系统安装Node.js及配置环境变量 HarmonyOS:如何使用系统自带图标 HarmonyOS:使用本地真机运行应用/服务 HarmonyOS:应用隐私保护 HarmonyOS:应用数据安全
鸿蒙知识点
为敢技术 · 2024-11-12 · via 博客园 - 为敢技术

一、页面和自定义组件生命周期区别:

在开始之前,我们先明确自定义组件和页面的关系:

1、自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。

2、页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。

3、页面生命周期:即被@Entry装饰的组件生命周期,提供以下生命周期接口:

onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。

onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。

onBackPress:当用户点击返回按钮时触发。

4、组件生命周期:即一般用@Component装饰的自定义组件的生命周期,提供以下生命周期接口:

aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。

onDidBuild:组件build()函数执行完成之后回调该接口,不建议在onDidBuild函数中更改状态变量、使用animateTo等功能,这可能会导致不稳定的UI表现。

aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。生命周期流程如下图所示,下图展示的是被@Entry装饰的组件(页面)生命周期。

二、装饰器用过哪些分别是什么

@Component装饰器:装饰的UI单元

@Builder装饰器:自定义构建函数

@BuilderParam装饰器:引用@Builder函数

@Styles装饰器:定义组件重用样式

@Extend装饰器:定义扩展组件样式

@AnimatableExtend装饰器:定义可动画属性

1、 状态管理

(1)、V1稳定版

@State装饰器:组件内状态

@Prop装饰器:父子单向同步

@Link装饰器:父子双向同步

@Provide装饰器和@Consume装饰器:与后代组件双向同步

@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

@Watch装饰器:状态变量更改通知

@Track装饰器:class对象属性级更新

(2)、V2试用版

@ObservedV2装饰器和@Trace装饰器:类属性变化观测

@ComponentV2装饰器:自定义组件

@Local装饰器:组件内部状态

@Param:组件外部输入

@Once:初始化同步一次

@Event装饰器:组件输出

@Monitor装饰器:状态变量修改监听

@Provider装饰器和@Consumer装饰器:跨组件层级双向同步

@Computed装饰器:计算属性

三.Ability生命周期,以及如何与绑定的UI通信。这里的Ability指的就是UIAbility。

1、UIAbility生命周期

UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态,

如下图所示,生命周期:

2、UIAbility与绑定的UI通信

基于当前的应用模型,可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。

(1)、使用EventHub进行数据通信:在基类Context中提供了EventHub对象,可以通过发布订阅方式来实现事件的传递。在事件传递前,订阅者需要先进行订阅,当发布者发布事件时,订阅者将接收到事件并进行相应处理。

(2)、使用AppStorage/LocalStorage进行数据同步:ArkUI提供了AppStorage和LocalStorage两种应用级别的状态管理方案,可用于实现应用级别和UIAbility级别的数据同步。

四、SQLite,讲讲具体作用是什么,如何使用的?

关系型数据库基于SQLite组件,适用于存储包含复杂关系数据的场景,比如一个班级的学生信息,需要包括姓名、学号、各科成绩等,又或者公司的雇员信息,需要包括姓名、工号、职位等,由于数据之间有较强的对应关系,复杂程度比键值型数据更高,此时需要使用关系型数据库来持久化保存数据。

import { relationalStore } from "@kit.ArkData"
import User from "../model/User"

class RelationalStoreUtil{

  private store:relationalStore.RdbStore | undefined = undefined

  /**
   * 初始化数据库
   * @param context
   * @param config
   * @param sql
   */
  loadRelationalStore(context:Context,config:relationalStore.StoreConfig,sql:string){
    relationalStore.getRdbStore(context,config,(err,store) => {
      if (err) {
        console.log("myDB", "创建数据库对象失败")
        return;
      }
      // 创建数据表
      store.executeSql(sql)
      this.store = store
      console.log("myDB", "数据库创建成功")
    })
  }

  /**
   * 添加数据
   * @param tableName
   * @param data
   * @returns
   */
  async insertStore(tableName:string,data:relationalStore.ValuesBucket){
    if(this.store !== undefined){
      return await this.store.insert(tableName,data)
    }
    return
  }

  /**
   * 查询数据
   * @param tableName
   * @param fields
   */
  async selectStore(tableName:string,fields:Array<string>){
    let user:User[] = []
    let predicates = new relationalStore.RdbPredicates(tableName)
    if(this.store !== undefined){
      let result = await this.store.query(predicates,fields)
      while (result.goToNextRow()){
        const id = result.getLong(result.getColumnIndex("id"))
        const name = result.getString(result.getColumnIndex("name"))
        const age = result.getLong(result.getColumnIndex("age"))
        user.push(new User(id,name,age))
      }
      // 释放数据库资源
      result.close()
      return user
    }
    return []
  }

}

export default new RelationalStoreUtil()

五、如何获取上下文信息,获取以后做了什么事情。

Context是应用中对象的上下文,其提供了应用的一些基础信息,例如resourceManager(资源管理)、applicationInfo(当前应用信息)、dir(应用文件路径)、area(文件分区)等,以及应用的一些基本方法,例如createBundleContext()、getApplicationContext()等。UIAbility组件和各种ExtensionAbility派生类组件都有各自不同的Context类。分别有基类Context、ApplicationContext、AbilityStageContext、UIAbilityContext、ExtensionContext、ServiceExtensionContext等Context

1、 获取上下文信息Context

import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Page_Context {
  private context = getContext(this) as common.UIAbilityContext;
}

2、获取之后做了什么事情

(1)、用户首选项需要Context

preferences.getPreferencesSync(this.context, { name:"myStore" })

(2)、键值型数据库需要Context

const kvManagerConfig: distributedKVStore.KVManagerConfig = {
  context: this.context,
  bundleName: 'com.example.kvstoredemo'
}

(3)、关系型数据库需要Context

relationalStore.getRdbStore(this.context,config)

六、prop和link的区别

1、@Prop装饰器:父子单向同步 @Prop装饰的变量可以和父组件建立单向的同步关系。@Prop装饰的变量是可变的,但是变化不会同步回其父组件。

(1)、@Prop变量允许在本地修改,但修改后的变化不会同步回父组件。

(2)、当数据源更改时,@Prop装饰的变量都会更新,并且会覆盖本地所有更改。因此,数值的同步是父组件到子组件 (所属组件),子组件数值的变化不会同步到父组件

2、@Link装饰器:父子双向同步 子组件中被@Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。

(1)、@Link装饰的变量与其父组件中的数据源共享相同的值。