1、是否支持开发者自行管理线程数量
ArkTS侧不支持,Native侧无限制。
线程上限:
-
TaskPool:TaskPool自行管理生命周期,无需关心任务负载高低,TaskPool最多为cpu online个数 - 1,8核通常为7个,根据负载扩缩容,外部无法控制和超出,如果同时启用超过,则会等待。
-
Worker:开发者自行管理Worker的数量及生命周期,最多开启64个Worker,超出会报异常。
-
C++创建线程无数量限制。
2、是否支持模块的动态加载?如何实现
当前不支持动态加载设备侧的二进制包;可以使用动态import进行异步加载,达到类似于Class.forName()反射的效果。
3、如何实现AOP(代码插桩)能力
目前ArkTS的util工具库中提供了Aspect的能力,可以对类方法进行前后插桩以及替换实现。
4、是否支持对页面等ArkUI组件相关元素进行插桩
ArkUI相关的接口会在编译时做转换,编辑态使用的对象或方法在运行时可能并不真实存在,因此Aspect类提供的插桩/替换接口不适用于ArkUI组件相关元素。
5、如何判断能否对接口进行插桩或替换
只要类和方法在运行时是实际存在的对象,并且方法的属性描述符的writable字段为true,就可以对接口进行插桩和替换。
6、如何在ArkTS中实现运行时注解的能力
可以使用TS三方库reflect-metadata获得类似java运行时注解的功能。
reflect-metadata提供的装饰器允许对类和属性和方法做标记,并提供了接口可以在运行时获取标记的信息。
7、ArkTS是否支持解构
不支持。ArkTS是静态类型,而解构是依赖于结构兼容性的动态特性并且解构声明中的名称必须和解构对象中的属性名称一致,因此不支持解构。
-
不支持解构赋值:ArkTS不支持解构赋值。可使用其他替代方法,例如,使用临时变量。
-
不支持解构变量声明:依赖于结构兼容性的动态特性并且解构声明中的名称必须和被解构对象中的属性名称一致。
-
不支持参数解构的函数声明:ArkTS要求实参必须直接传递给函数,且必须指定到形参。
8、如何使用ErrorManager捕获异常
ErrorManager可以提供对错误观察器的注册和注销的能力。
异常监听(ErrorObserver)接口功能介绍:
接口名称 | 说明 |
---|---|
onUnhandledException(errMsg: string): void | 系统回调接口,应用注册后,当应用产生未捕获的异常时的回调。 |
onException?(errObject: Error): void | 系统回调接口,应用注册后,当应用产生异常上报JS层时的回调。 |
9、是否支持在TS文件中加载ArkTS文件,TS是否会被限制使用
不支持在TS文件中调用ArkTS文件,对于某些在ArkTS中禁用的语法,例如:with语句等,可以考虑在TS文件中进行编写,再在ArkTS文件中调用的方式实现。
不会限制使用TS/JS文件,只会限制在TS/JS文件中import ets文件。
10、ArkTS是否支持反射调用类的静态成员函数和实例成员函数
ArkTS可以通过动态import的方式实现反射功能,通过类名和方法名调用类中的静态成员函数和实例成员函数。
11、如何将Map转换为JSON字符串
可以将Map转成Record后,再通过JSON.stringify()转为JSON字符串。
12、如何获取对象的类名
可以先获取类的实例,然后通过constructor的name属性获取类名。
13、如何删除Record中的元素
Record无直接修改的方式,可以转换成Map进行增删改后,再转换成Record。
14、ArkTS是否支持多继承
接口支持多继承,类不支持,只支持单继承。
15、ArkTS是否支持交叉类型
交叉类型会导致性能下降,类型推断变得复杂和不确定。
因此ArkTS不支持intersection type,可以使用继承作为替代方案。
16、ArkTS是否支持匿名内部类
ArkTS不支持匿名类,建议使用嵌套类实现。
因为使用匿名类创建的对象类型未知,这与ArkTS不支持structural typing和对象字面量的类型冲突。限制主要是考虑运行时的性能开销,需要显示声明类。
17、如何使用Record
构造一个对象类型,其属性键为 "Keys" ,其属性值为 "Type",可用于将一种类型的属性映射到另一种类型。
更多详情查看:文档中心