自学内容网 自学内容网

鸿蒙面试的一些可能问到的点

页面跳转
router

鸿蒙中跳转主要有两种,一种是router,一种是Navigation,官方推荐使用Navigation。

Router适用于模块间与模块内页面切换,通过每个页面的url实现模块间解耦。模块内页面跳转时,为了实现更好的转场动效场景不建议使用该模块,推荐使用Navigation。

Router模块提供了两种跳转模式,分别是router.pushUrl()router.replaceUrl()。这两种模式决定了目标页面是否会替换当前页。

  • router.pushUrl():目标页面不会替换当前页,而是压入页面栈。这样可以保留当前页的状态,并且可以通过返回键或者调用router.back()方法返回到当前页。

  • router.replaceUrl():目标页面会替换当前页,并销毁当前页。这样可以释放当前页的资源,并且无法返回到当前页。

页面栈的最大容量为32个页面。如果超过这个限制,可以调用router.clear()方法清空历史页面栈,释放内存空间。

同时,Router模块提供了两种实例模式,分别是Standard和Single。这两种模式决定了目标url是否会对应多个实例。

  • Standard:多实例模式,也是默认情况下的跳转模式。目标页面会被添加到页面栈顶,无论栈中是否存在相同url的页面。

  • Single:单实例模式。如果目标页面的url已经存在于页面栈中,则会将离栈顶最近的同url页面移动到栈顶,该页面成为新建页。如果目标页面的url在页面栈中不存在同url页面,则按照默认的多实例模式进行跳转。

组件导航 (Navigation)

Navigation是路由容器组件,一般作为首页的根容器,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。Navigation组件适用于模块内和跨模块的路由切换,一次开发,多端部署场景。通过组件级路由能力实现更加自然流畅的转场体验,并提供多种标题栏样式来呈现更好的标题和内容联动效果。在不同尺寸的设备上,Navigation组件能够自适应显示大小,自动切换分栏展示效果。

Navigation组件主要包含​导航页(NavBar)和子页(NavDestination)。导航页由标题栏(Titlebar,包含菜单栏menu)、内容区(Navigation子组件)和工具栏(Toolbar)组成,其中导航页可以通过hideNavBar属性进行隐藏,导航页不存在页面栈中,导航页和子页,以及子页之间可以通过路由操作进行切换。

在API Version 9上,需要配合NavRouter组件实现页面路由,从API Version 10开始,推荐使用NavPathStack实现页面路由。

生命周期

生命周期大致可分为三类,自定义组件生命周期、通用组件生命周期和自有生命周期(其中aboutToAppear和aboutToDisappear是自定义组件的生命周期。如果NavDestination外层包含自定义组件时则存在;OnAppear和OnDisappear是组件的通用生命周期。

route的@Entry的生命周期

Navigation生命周期

冷启动与热启动

uiability首次启动为冷启动,非首次为热启动

冷启动为onCreate()→onWindowStageCreate()→onForeground()

热启动为onNewWant()→onForeground()

布局性能优化

布局时应尽量减少总节点数,减少性能消耗

方向

1,移除冗余的节点

2,使用扁平化布局减少节点数

具体内容:

移除多余的外层线性布局

切换不同的布局类型实现扁平化

合理控制元素的显示隐藏

设置固定宽高减少measure的耗时(未设置和百分比宽高性能消耗较大)

仅在必要环境下使用高性能布局

长列表加载性能优化

主要分为四种

懒加载(10000条数据以上时建议使用layz)

缓存列表项(额外缓存部分列表项,一般为页面数据显示条数/2)

组件复用(减少组件创建的耗时操作@Reusable,aboutToReuse)

布局优化(相对布局,控制布局在5-8层)

webview的使用与传参

导入

import { webview } from '@kit.ArkWeb';

创建控制器

webController: webview.WebviewController = new webview.WebviewController();

再去build中选择本地的页面or网络中的页面

Web({ src: $rawfile('index.html'), controller: controller })//本地

Web({ src: 'www.example.com', controller: this.controller })//网络

当网页中调用

function submitAgreement(){ confirm(agreeCheckbox.checked) }

时,回调原生的onConfirm方法。

.onConfirm((event) => { return true; })

带的参数可以通过event.message获取

用户首选项

导入模块:

import { preferences } from '@kit.ArkData';

创建存储的名字:

options: preferences.Options = { name: 'agreementPG' };

创建操作的对象:

dataPreferences: preferences.Preferences = preferences.getPreferencesSync(getContext(), this.options);

存入数据(保存在内存当中,退出app数据重进会消失):

this.dataPreferences.putSync('agreement', 'true');

持久化存储(保存在内存当中,退出app数据重进不会消失): this.dataPreferences.flush();

读取数据:

this.dataPreferences.getSync('agreement', 'false')

异步编程

ArkTS 支持 Promise 和 async/await 语法,使得异步编程变得更加简洁明了。

async function fetchData(url: string): Promise {   let response = await fetch(url);   let data = await response.json();   return data; }

fetchData('https://api.example.com/data')   .then(data => console.log(data))   .catch(error => console.error(error));

常用装饰器
@Entry

表示页面的入口,装饰struct

@Component

装饰struct,表示具有基于组件的能力,保证内部包含一个且只能包含一个build()函数,用于绘制UI界面

@State

来装饰变量的装饰器( 其实就是用于定义变量 ),必须本地初始化数据, 支持通过构造函数赋值,当State值修改,所在build方法会被重新调用

@Prop

继承@State的功能,定义时不需要本地直接初始化,调用子组件时需要对其进行赋值,被修饰的变量建立和父组件单向同步关系,@Prop可变但不会传回父组件,父组件变化@Prop被覆盖

@Link

@Link 装饰的变量和父组件会构建双向同步关系,子组件使用 @Link 定义变量的时候不需要赋值, 而是调用子组件的时候进行赋值,调用子组件赋值的时候使用 "$变量名" 的形式进行赋值,@Link 装饰器不能再 @Entry 装饰的自定义组件中使用。

@Provide 和 @Consume

如果层级过高的话, 在父子组件之间进行数据传递的话, @State/@Link使用起来就比较麻烦,我们可以使用 @Provide 和 @Consume 进行跨组件数据传递。

使用发布订阅模式, 父类使用 @Provide, 其他需要观察的子类使用 @Consume, 就可以实现双向绑定
当层级很深时, 不需要一层一层传递数据, 直接使用发布订阅进行监听就能实现相同的效果
@Provide 和 @Consume 可以通过相同的变量名或者相同的变量别名绑定, 但是变量类型必须相同
@Provide 必须设置初始值, @Consume 不可以设置默认初始值
@Provide 修饰的变量和 @Consume 修饰的变量可以是一对多的关系

@Watch

观察者装饰器,当监控的变量发生变化,函数触发

@Builder

@Builder 是 ArkUI 提供的一种更加轻量的复用机制
因为在 @Component 内能且只能创建一个 build() 函数
我们可以在组件内利用 @Builder 装饰器自定义一个构建函数
@Builder 创建的构建函数遵循 build() 函数的语法规则, 并且可以在 build() 函数内调用

@Styles

样式的复用


原文地址:https://blog.csdn.net/saiki1281/article/details/142846961

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!