HarmonyOS开发者版本6.0.0(API 20)Release(鸿蒙6) 在2005年9月25日正式发布。相对于HarmonyOS 5.0版本增加了多项新能力及对已有能力的优化。同时也有部分API进行了变更。
本篇内容是《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》这本书整体内容的延续,是咱这本书读者的福利,内容以本书的示例作为基础,适配鸿蒙6过程中,所需要完成的调整。并将这些调整记录分享给大家,本篇内容主要介绍与基础能力相关的鸿蒙6兼容适配。
对本书感兴趣的同学可以点击以下链接进行购买,及参加 我的班级(华为官方)共同学习
往期福利:
- 【页面路由导航】三步实现页面跳转的完整示例-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
- 【鸿蒙生态共建】一文10个示例讲懂鸿蒙系统ArkTS中的null与undefined的区别与应用-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
- 【鸿蒙生态共建】一文两表三实例讲清async函数与普通函数的区别-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
- 【鸿蒙生态共建】一文说清基础类型数据的非预期输入转换与兜底-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
- 【鸿蒙生态共建】一文说明兼容版本、目标版本和编译版本的区别与应用实践-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
- 【鸿蒙生态共建】一文说清复杂类型数据的非预期输入转换与兜底-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
1: WARN: The project has not explicitly set the 'targetSdkVersion' version at build-profile.json5. It is recommended to configure it.
该警告提示如下图所示,在本书中的示例代码均是以DevEco Studio 5.0版本创建,该版本创建的项目默认是没有targetSdkVersion配置项,本书的示例中在使用DevEco Studio均会提示该警告,解决该警告,可参考我在之前发表的这篇文章。
【鸿蒙生态共建】一文说明兼容版本、目标版本和编译版本的区别与应用实践-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
2: windowStage.on/off Function may throw exceptions. Special handling is required.
在鸿蒙系统中,App可以通过windowStage.on来监听WindowStage生命周期的变化,处理App活动、非活动、显示、隐藏等事件。常见的写法为在onWindowStageCreate方法中,增加事件监听及处理代码,示例如下:
windowStage.on('windowStageEvent', (data) => {
let stageEventType: window.WindowStageEventType = data;
switch (stageEventType) {
case window.WindowStageEventType.SHOWN:
hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent SHOWN.');
break;
case window.WindowStageEventType.ACTIVE:
hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent ACTIVE.');
break;
case window.WindowStageEventType.INACTIVE:
hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent INACTIVE.');
break;
case window.WindowStageEventType.HIDDEN:
hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent HIDDEN.');
break;
// ...
default:
break;
}
});
在DevEco Studio 6.0版本以编译上述代码时会提示警告Function may throw exceptions. Special handling is required.如下图所示
将上述代码增加try catch,警告即可解除,对应的off也需要使用这种方式来解除警告。
try {
windowStage.on('windowStageEvent', (data) => {
let stageEventType: window.WindowStageEventType = data;
switch (stageEventType) {
case window.WindowStageEventType.SHOWN:
hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent SHOWN.');
break;
case window.WindowStageEventType.ACTIVE:
hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent ACTIVE.');
break;
case window.WindowStageEventType.INACTIVE:
hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent INACTIVE.');
break;
case window.WindowStageEventType.HIDDEN:
hilog.info(0x0000, '俩毛豆', 'EntryAbility WindowStageEvent HIDDEN.');
break;
// ...
default:
break;
}
});
} catch (exception) {
hilog.info(0x0000, '俩毛豆', '%{public}s', `Failed to on the listener for window stage event changes. Cause: ${JSON.stringify(exception)}`);
}
3: 'getContext' has been deprecated.
在ArkTS语言中,getContext接口可以获取与页面上下文组件关联的Context对象,如果需要在页面中获得当前Ability的Context,可调用getContext接口获取当前页面关联的UIAbilityContext或ExtensionContext。
但是,从API version 18开始废弃,官方建议使用UIContext中的getHostContext替代。当使用getContext时,编译会报警告如下图所示。
从API version 12开始,可以通过使用UIContext中的getHostContext来明确UI的执行上下文。也就是说,如果App仅在HarmonyOS NEXT(API 12之上)运行,那么默认的使用getHostContext接口,就可以实现获取当前页面关联的Context对象。
那么对于getContext接口将要废弃如何修改呢,主要有两个方面:
- 如果是在UI组件中使用的getContext接口,则可以使用this.getUIContext().getHostContext()
- 如果是在非UI组件中使用的getContext接口,则可以先将this.getUIContext().getHostContext()存储在全局存储区中(例如使用AppStorage、全局管理类等方式将该值存储),在需要时获取该值即可。在整个HAP中该值是唯一的,可以在第一个页面开始加载时存储。
4: router.pushUrl() 'pushUrl' has been deprecated.
页面跳转是App运行必要的底层支持能力,在HarmonyOS NEXT中提供多种方式实现页面跳转的能力,在本书中,部分章节的内容,页面跳转主要使用router.pushUrl()来实现从当前页面跳转到另一页面,现阶段官方推荐的页面跳转方式为导航的方式。
比如本书的部分章节中的示例,在编译时会有'pushUrl' has been deprecated.警告提示,如下图所示。
规避该警告的方式,可以使用导航路由,在咱们的《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利系列之前的内容中有介绍,详情可参考以下链接内容。
【鸿蒙生态共建】【页面路由导航】三步实现页面跳转的完整示例-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
5: router.getParams() 'getParams' has been deprecated.
在使用router时,在页面跳转时,可以指定参数。目标页面可以使用router.getParams()获取源页面传入的参数。同样,现阶段router.getParams()也是将要废弃的状态。在编译时会有 'getParams' has been deprecated.警告提示,如下图所示。
规避该警告的方式,可以使用导航路由,在咱们的《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利系列之前的内容中有介绍,详情可参考以下链接内容。
【鸿蒙生态共建】【页面路由导航】三步实现页面跳转的完整示例-《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》读者福利
总结:
本文基于《精通HarmonyOS NEXT :鸿蒙App开发入门与项目化实战》,为开发者提供鸿蒙6适配指南,涵盖API变更、编译警告处理等,提供5个关键适配方案:1)通过try-catch处理windowStage.on/off异常警告;2)使用getHostContext替代已废弃的getContext接口;3)采用导航路由替代将被弃用的router.pushUrl/getParams方法;4)解决targetSdkVersion未配置警告;5)优化数据类型转换处理。
对本书感兴趣的同学可以点击以下链接进行购买,及参加 我的班级(华为官方)共同学习