转自华为开发者联盟【“蒙”友会“稿”起来】API8-》API9
鸿蒙开发HarmonyOS3.1 API8-》API9
随着系统的演进发展,HarmonyOS先后提供了两种应用模型:
- FA(Feature Ability)模型: HarmonyOS API 7开始支持的模型,已经不再主=。
- Stage模型: HarmonyOS API 9开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。
因此,开发API9或以上(也就是HarmonyOS3.1或以上)的应用,就必须使用Stage模型进行开发。
一、API8-》API9 变化:
1、ArkTS声明式UI更新机制优化
- ArkTS声明式UI在API9上优化了相关UI更新机制,当自定义组件的某个状态变量发生变化导致自定义组件重新渲染时,仅执行该自定义组件build函数中的部分UI描述(使用了该状态变量的内置UI组件的UI描述)来实现更高性能的UI更新。
- 而API8及以前在状态变量发生变化时会执行build函数中的全量UI描述来实现UI更新。
2、Ability框架
- 应用组件启动规则变更
- API异常处理方式变更
- 部分接口废弃并新增对应替代接口
- 请求权限对应接口的变更
3、包管理
- 包管理API异常处理方式变更,原有API8及之前的接口废弃,使用新的API9接口
等等。
二、新建API9的工程
1、按照官方教程使用ArkTS语言开发(Stage模型),可以非常清晰简单地创建ArkTS工程。关键点:
- Compile SDK选择“3.1.0(API 9)”
- Model 选择“Stage”
2、使用DevEco Studio的QuickStart也非常方便
三、API8转API9的工程
1、FA模型不能直接转换为Stage模型
API8的工程都是FA模式,不能直接转换为API9的Stage模型的,但是官方提供了一定的辅助功能,在工程切换API后,会把工程目录更新一遍。后面就需要根据工程项目的实际编码,靠自己逐个转化。
2、部分转化
- Context
getContext(this) as AppContext.AbilityContext
改为
getContext(this) as any
- 页面路由表(放在main_pages.json里)
{
"src": [
"pages/NavPage",
"pages/DetailsPage",
"pages/ProductDetailPage"
]
}
- Stage模型概念图
四、API9的测试
1、测试设备
从DevEco Studio的Device Manager可以看到,IDE提供了本地模拟器、远程模拟器和远程真机的测试方式,当然,如果有HarmonyOS3.1的真机设备,也可以真机调试。其中,远程真机只有API6和API8的机器,期待上线API9的远程真机。
2、体验对比:
- 真机>远程真机>本地模拟器>远程模拟器
- 目前本地模拟器比较慢(占用大量资源),远程模拟器画质受网速影响比较大,远程真机还没有API9,手上的设备也还没能升到API9,也就是HarmonyOS3.1……期待、等待……
五、期待
开发API9的Stage模型应用还是处于过渡到统一的阶段,免不了一些取舍,需要做一定的转化兼容适配。相信华为能很快迭代好。在这个过程,也适当提出一些开发API9的问题和建议:
1、找不到API8转化到API9合适的文档资料,也没有教程,只有零碎的API规则说明。
2、API9的测试还是比较麻烦,如上述对测试的说明。
3、API9,Stage模型的例子、模板太少。