GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>系统教程 > 聊一聊OpenHarmony启动页后记

聊一聊OpenHarmony启动页后记

来源:Ghost系统之家浏览:时间:2023-07-14 09:22:15

聊一聊OpenHarmony启动页后记

作者:Tuer白晓明 2023-03-07 15:58:31系统 OpenHarmony 通过使用云数据库、云存储相结合的方式使应用的启动页能够动态化,即可以在不更新应用的情况下更改启动页的参数已达到启动页的动态化。

​​想了解更多关于开源的内容,请访问:​​

​​51CTO开源基础软件社区​​

​​https://ost.51cto.com​​

1、回顾

通过DevEco Studio端云协同开发OpenHarmony/HarmonyOS应用程序(以下简称应用)集成AppGallery Connect(以下简称AGC)平台​​云函数​​​、​​云数据库​​​、​​云存储​​三篇文章笔者从创建端云协同应用程序开始,逐步对云函数、云数据库、云存储简单的数据读取做了简单的介绍。通过使用云数据库、云存储相结合的方式使应用的启动页能够动态化,即可以在不更新应用的情况下更改启动页的参数已达到启动页的动态化。

2、问题及解决方案

问题:由于启动页参数来源于云数据库、云存储,启动页数据渲染前会受网络影响出现白屏。

解决方案:为启动页数据单独封装获取方法,在启动页新增状态值,数据未加载完成后显示当前应用的​​icon​​图标,数据加载完成后渲染实际获取到的数据。

注:若读者有其他的处理方法可与笔者共同探讨一下。

3、优化调用方法

使用async将函数异步化,使用await获取Promise的值。

(1)云数据库获取数据方法异步化

每次使用存储区都要在使用完成后释放,新增关闭存储区方法。

// service/CloudDBService.ts// @ts-ignoreimport * as schema from './app-schema.json';import { splash } from './splash';import {AGConnectCloudDB,CloudDBZoneConfig,CloudDBZone,CloudDBZoneQuery} from '@hw-agconnect/database-ohos';import { AGCRoutePolicy } from '@hw-agconnect/core-ohos';import { getAGConnect } from './AgcConfig';export class CloudDBService {private static readonly ZONE_NAME = "cloudDBZoneSplash";private static cloudDB: AGConnectCloudDB;private static cloudDBZone: CloudDBZone;private static isInit: boolean;public static async init(context: any): Promise {if (this.isInit) {return;}try {// 初始化agcgetAGConnect(context);// 初始化Cloud DBawait AGConnectCloudDB.initialize(context);// 获取对应数据处理位置的CloudDB实例this.cloudDB = await AGConnectCloudDB.getInstance(AGCRoutePolicy.CHINA);// 创建对象类型this.cloudDB.createObjectType(schema);// 打开存储区await this.openZone(this.ZONE_NAME);this.isInit = true;} catch (err) {console.error(JSON.stringify(err))}return Promise.resolve(this.isInit);}// 打开存储区private static async openZone(zoneName: string): Promise {if (this.cloudDBZone) {return;}try {const cloudDBZoneConfig = new CloudDBZoneConfig(zoneName);this.cloudDBZone = await this.cloudDB.openCloudDBZone(cloudDBZoneConfig);} catch (err) {console.error(JSON.stringify(err));}}// 关闭存储区public static async closeZone(): Promise {try {this.cloudDB.closeCloudDBZone(this.cloudDBZone);this.cloudDBZone = null;} catch (err) {console.error(JSON.stringify(err))}}public static async query(): Promise {try {const query = CloudDBZoneQuery.where(splash).equalTo("status", 1);const result = await this.cloudDBZone.executeQuery(query);return result.getSnapshotObjects().length > 0 ? result.getSnapshotObjects()[0] : new splash();} catch (err) {console.error(JSON.stringify(err));}}}

(2)云存储获取数据方法异步化

// services/cloudstorage/CloudStorageService.tsimport agconnect from '@hw-agconnect/api-ohos';import "@hw-agconnect/cloudstorage-ohos";import { getAGConnect } from '../AgcConfig';export class CloudStorageService {public static async init(context: any, path: string): Promise {try {getAGConnect(context);// 初始化默认实例const storage = agconnect.cloudStorage();// 创建需要下载文件的引用const storageReference = await storage.storageReference();var reference = await storageReference.child(path);return reference.getDownloadURL();} catch (err) {console.error(JSON.stringify(err));}}}

4、为启动页数据获取封装专用方法

可以将一些处理逻辑放在该方法中处理。

// services/SplashService.tsimport { splash } from './splash';import { CloudDBService } from '../services/CloudDBService';import { CloudStorageService } from '../services/cloudstorage/CloudStorageService';export class SplashService {public static async querySplash(context: any): Promise {try {await CloudDBService.init(context);let splash = await CloudDBService.query();let url = await CloudStorageService.init(context, splash.backgroundImg);splash.backgroundImg = url;await CloudDBService.closeZone();return splash;} catch (err) {console.error(JSON.stringify(err));}}}

5、改写启动页

启动页新增状态码,用于数据未加载完成呈现给用户的显示界面,规避数据未获取导致的白屏现象。

@State isSkip: boolean = false;

在aboutToAppear()方法中执行获取启动页数据的方法。

aboutToAppear() {this.isSkip = false;SplashService.querySplash(getContext(this)).then((ret) => {this.isSkip = true;this.result = ret;})}

页面中使用if(){}else{}条件语句判断渲染的组件,从而规避数据请求时间导致的白屏。

if (this.isSkip) {SplashPage({ mSplash: {timer: this.result.timer,isLogo: this.result.isLogo,backgroundImg: this.result.backgroundImg,companyName: this.result.companyName,mFontColor: this.result.mFontColor}, skip: this.onSkip })} else {Column() {Image($r('app.media.icon')).objectFit(ImageFit.None)}.width('100%').height('100%')}

通过更改AGC平台云数据库中启动页数据状态,可以实现下次启动应用程序,启动页呈现不同内容。使用场景如新闻类App可以在启动页呈现一条配备图片的热文;常规App可以在启动页呈现一条经典语录;实现不同节日在启动页呈现问候信息。

6、后记

本文所记为之前文章的总结,针对获取AGC平台各项服务的数据,可直接调用对应的方法即可。若出现复杂的情况,如后面笔者将实现认证服务登录,并将用户信息存储到云数据库中,可以结合云函数,在用户登录的时候,直接调用云函数去保存用户信息,存储方法可以通过云函数的AUTH触发器实现数据存储云数据库中;再如用户上传图片,生成缩略图,也可以利用云函数将原图和缩略图一同保存到云存储中。

​​想了解更多关于开源的内容,请访问:​​

​​51CTO开源基础软件社区​​

​​https://ost.51cto.com​​

责任编辑:jianghua 来源:51CTO 开源基础软件社区 云数据库云存储

推荐系统

  • 电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    语言:中文版系统大小:2.98GB系统类型:Win8

    电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有

  • 微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    语言:中文版系统大小:5.13GB系统类型:Win11

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化  1、保留 Edge浏览器。  2、隐藏“操作中心”托盘图标。  3、保留常用组件(微软商店,计算器,图片查看器等)。  5、关闭天气资讯。 

  • Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    语言:中文版系统大小:4.75GB系统类型:Win11

    Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件

  • windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化

  • 微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载

  • 微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    语言:中文版系统大小:0MB系统类型:Win11

    微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为

  • 雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    语言:中文版系统大小:4.75GB系统类型:

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统

  • 雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    语言:中文版系统大小:5.91GB系统类型:Win7

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户