0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmonyApp啟動頁后記

ITMING ? 來源:ITMING ? 作者:ITMING ? 2023-03-03 16:43 ? 次閱讀

1 回顧

通過DevEco Studio端云協(xié)同開發(fā)OpenHarmony/HarmonyOS應(yīng)用程序(以下簡稱應(yīng)用)集成AppGallery Connect(以下簡稱AGC)平臺云函數(shù)、云數(shù)據(jù)庫、云存儲三篇文章筆者從創(chuàng)建端云協(xié)同應(yīng)用程序開始,逐步對云函數(shù)、云數(shù)據(jù)庫、云存儲簡單的數(shù)據(jù)讀取做了簡單的介紹。通過使用云數(shù)據(jù)庫、云存儲相結(jié)合的方式使應(yīng)用的啟動頁能夠動態(tài)化,即可以在不更新應(yīng)用的情況下更改啟動頁的參數(shù)已達(dá)到啟動頁的動態(tài)化。

2 問題及解決方案

問題: 由于啟動頁參數(shù)來源于云數(shù)據(jù)庫、云存儲,啟動頁數(shù)據(jù)渲染前會受網(wǎng)絡(luò)影響出現(xiàn)白屏。

解決方案: 為啟動頁數(shù)據(jù)單獨封裝獲取方法,在啟動頁新增狀態(tài)值,數(shù)據(jù)未加載完成后顯示當(dāng)前應(yīng)用的icon圖標(biāo),數(shù)據(jù)加載完成后渲染實際獲取到的數(shù)據(jù)。

注: 若讀者有其他的處理方法可與筆者共同探討一下。

3 優(yōu)化調(diào)用方法

使用async將函數(shù)異步化,使用await獲取Promise的值。

3.1 云數(shù)據(jù)庫獲取數(shù)據(jù)方法異步化

每次使用存儲區(qū)都要在使用完成后釋放,新增關(guān)閉存儲區(qū)方法。

// service/CloudDBService.ts
// @ts-ignore
import * 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<boolean> {
        if (this.isInit) {
            return;
        }
        try {
            // 初始化agc
            getAGConnect(context);
            // 初始化Cloud DB
            await AGConnectCloudDB.initialize(context);
            // 獲取對應(yīng)數(shù)據(jù)處理位置的CloudDB實例
            this.cloudDB = await AGConnectCloudDB.getInstance(AGCRoutePolicy.CHINA);
            // 創(chuàng)建對象類型
            this.cloudDB.createObjectType(schema);
            // 打開存儲區(qū)
            await this.openZone(this.ZONE_NAME);
            this.isInit = true;
        } catch (err) {
            console.error(JSON.stringify(err))
        }
        return Promise.resolve(this.isInit);
    }

    // 打開存儲區(qū)
    private static async openZone(zoneName: string): Promise

3.2 云存儲獲取數(shù)據(jù)方法異步化

// services/cloudstorage/CloudStorageService.ts
import 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<string> {
        try {
            getAGConnect(context);
            // 初始化默認(rèn)實例
            const storage = agconnect.cloudStorage();
            // 創(chuàng)建需要下載文件的引用
            const storageReference = await storage.storageReference();
            var reference = await storageReference.child(path);
            return reference.getDownloadURL();
        } catch (err) {
            console.error(JSON.stringify(err));
        }
    }
}

4 為啟動頁數(shù)據(jù)獲取封裝專用方法

可以將一些處理邏輯放在該方法中處理。

// services/SplashService.ts
import { splash } from './splash';
import { CloudDBService } from '../services/CloudDBService';
import { CloudStorageService } from '../services/cloudstorage/CloudStorageService';

export class SplashService {

    public static async querySplash(context: any): Promise

5 改寫啟動頁

啟動頁新增狀態(tài)碼,用于數(shù)據(jù)未加載完成呈現(xiàn)給用戶的顯示界面,規(guī)避數(shù)據(jù)未獲取導(dǎo)致的白屏現(xiàn)象。

@State isSkip: boolean = false;

aboutToAppear()方法中執(zhí)行獲取啟動頁數(shù)據(jù)的方法。

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

頁面中使用if(){}else{}條件語句判斷渲染的組件,從而規(guī)避數(shù)據(jù)請求時間導(dǎo)致的白屏。

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平臺云數(shù)據(jù)庫中啟動頁數(shù)據(jù)狀態(tài),可以實現(xiàn)下次啟動應(yīng)用程序,啟動頁呈現(xiàn)不同內(nèi)容。使用場景如新聞類App可以在啟動頁呈現(xiàn)一條配備圖片的熱文;常規(guī)App可以在啟動頁呈現(xiàn)一條經(jīng)典語錄;實現(xiàn)不同節(jié)日在啟動頁呈現(xiàn)問候信息。

7 后記

本文所記為之前文章的總結(jié),針對獲取AGC平臺各項服務(wù)的數(shù)據(jù),可直接調(diào)用對應(yīng)的方法即可。若出現(xiàn)復(fù)雜的情況,如后面筆者將實現(xiàn)認(rèn)證服務(wù)登錄,并將用戶信息存儲到云數(shù)據(jù)庫中,可以結(jié)合云函數(shù),在用戶登錄的時候,直接調(diào)用云函數(shù)去保存用戶信息,存儲方法可以通過云函數(shù)的AUTH觸發(fā)器實現(xiàn)數(shù)據(jù)存儲云數(shù)據(jù)庫中;再如用戶上傳圖片,生成縮略圖,也可以利用云函數(shù)將原圖和縮略圖一同保存到云存儲中。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1946

    瀏覽量

    29736
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3548

    瀏覽量

    15738
收藏 人收藏

    評論

    相關(guān)推薦

    OpenHarmony之開機(jī)優(yōu)化

    OpenHarmony已經(jīng)支持了Bootchart工具,我們可以直接使用Bootchart工具,Bootchart工具介紹如下: 概述 Bootchart是一個用于系統(tǒng)啟動過程性能分析的開源軟件工具
    發(fā)表于 07-01 16:39

    OpenHarmony 明星開發(fā)板和應(yīng)用招募啟動,等你來!

    為助力企業(yè)和開發(fā)者快速找到好用的開發(fā)板和應(yīng)用,推動OpenHarmony生態(tài)發(fā)展,現(xiàn)啟動OpenHarmony 明星開發(fā)板和應(yīng)用招募”評選活動!本次活動旨在為 OpenHarmony
    發(fā)表于 09-14 15:21

    基于OpenHarmony【O了個H】 #OpenHarmony #HarmonyOS

    HarmonyOSOpenHarmony
    程皖Orz
    發(fā)布于 :2022年09月22日 10:15:45

    龍芯openharmony 【2】啟動分析

    開源項目見:首發(fā)!成功移植OpenHarmony到龍芯開發(fā)板,代碼開源~1 啟動文件和鏈接腳本龍芯開發(fā)板的板級代碼位于:device\loongson\ls1c300b_hrst 文件夾其中,啟動
    發(fā)表于 12-15 19:12

    如何導(dǎo)入OpenHarmony源碼

      Import Project適用于打開DevEco Device Tool創(chuàng)建的工程項目和獲取的OpenHarmony源碼。如果是打開OpenHarmony源碼,在打開工程時,點擊Import
    發(fā)表于 04-12 11:16

    RK3399/3568 適配OpenHarmony應(yīng)用開發(fā)環(huán)境搭建

    ,可通過歡迎的Configure (或圖標(biāo))> Settings > SDK Manager > OpenHarmony SDK界面,點擊
    發(fā)表于 04-12 18:54

    OpenHarmony教程】完成Hi3516開發(fā)板的燒錄

    的情況下,您還需要通過以下步驟將編譯好的源碼導(dǎo)入DevEco Device Tool,方可進(jìn)行燒錄。打開DevEco Device Tool,進(jìn)入Home,點擊Import Project打開工程。選擇
    發(fā)表于 07-27 15:33

    《沉浸式剖析OpenHarmony源代碼》開放100樣章

    《沉浸式剖析OpenHarmony源代碼》開放100樣章梁開祝2022.09.29這本書正在排版印刷中,不出意外的話,在10月中下旬便可面市了。目前,此書的定價和訂購鏈接暫時還沒有確定,待有確定
    發(fā)表于 09-29 11:33

    openharmony啟動方式

    6 月 1 日,開放原子開源基金會( OpenAtom Foundation,以下簡稱“基金會”)正式發(fā)布 OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)2.0 Canary。
    的頭像 發(fā)表于 06-22 10:59 ?1858次閱讀

    基于openharmony適配移植的導(dǎo)航控件

    項目介紹 項目名稱:GuideView 所屬系列:openharmony的第三方組件適配移植 功能:本系統(tǒng)能夠快速的為一個Ability里的任何一個Component控件創(chuàng)建一個遮罩式的導(dǎo)航,并且
    發(fā)表于 04-07 10:07 ?2次下載

    2022 OpenHarmony組件大賽,共建開源組件

    OpenHarmony官網(wǎng),點擊【互動】,可在【活動】頁面進(jìn)入大賽活動。本次大賽旨在鼓勵開發(fā)者積極參與OpenHarmony開源組件生態(tài)建設(shè),貢獻(xiàn)優(yōu)秀開源組件作品,與廣大OpenHarmon
    的頭像 發(fā)表于 04-26 17:31 ?1451次閱讀
    2022 <b class='flag-5'>OpenHarmony</b>組件大賽,共建開源組件

    自定義HarmonyOS啟動組件

    啟動作為應(yīng)用程序首次出現(xiàn)的頁面,該頁面提供一些預(yù)加載數(shù)據(jù)的提前獲取,防止應(yīng)用程序出現(xiàn)白屏等異常,如是否第一次訪問應(yīng)用程序并開啟應(yīng)用歡迎;判斷用戶登錄信息進(jìn)行頁面跳轉(zhuǎn);消息信息懶加載等。 常見
    的頭像 發(fā)表于 02-17 13:00 ?504次閱讀
    自定義HarmonyOS<b class='flag-5'>啟動</b><b class='flag-5'>頁</b>組件

    OpenHarmony競賽訓(xùn)練營正式啟動

    點擊藍(lán)字 ╳ 關(guān)注我們 開源項目 OpenHarmony 是每個人的 OpenHarmony OpenAtom OpenHarmony(簡稱“OpenHarmony”)競賽訓(xùn)練營正式開
    的頭像 發(fā)表于 10-07 21:10 ?487次閱讀

    資訊速遞 | OpenHarmony競賽訓(xùn)練營重磅啟動,邀您共享OpenHarmony探索與創(chuàng)新之旅!

    OpenHarmony競賽訓(xùn)練營活動旨在引導(dǎo)高校學(xué)生進(jìn)行OpenHarmony產(chǎn)學(xué)研用,培養(yǎng)更多應(yīng)用型人才和產(chǎn)業(yè)需求有效鏈接,吸引更多的高校師生參與到OpenHarmony的開發(fā)和應(yīng)用中。本期
    的頭像 發(fā)表于 10-10 10:27 ?663次閱讀
    資訊速遞 | <b class='flag-5'>OpenHarmony</b>競賽訓(xùn)練營重磅<b class='flag-5'>啟動</b>,邀您共享<b class='flag-5'>OpenHarmony</b>探索與創(chuàng)新之旅!

    報名啟動OpenHarmony源碼轉(zhuǎn)換器—多線程特性轉(zhuǎn)換賽題

    點擊藍(lán)字 ╳ 關(guān)注我們 開源項目 OpenHarmony 是每個人的 OpenHarmony 原文標(biāo)題:報名啟動OpenHarmony源碼轉(zhuǎn)換器—多線程特性轉(zhuǎn)換賽題 文章出處:【微信
    的頭像 發(fā)表于 12-29 16:15 ?550次閱讀
    報名<b class='flag-5'>啟動</b>|<b class='flag-5'>OpenHarmony</b>源碼轉(zhuǎn)換器—多線程特性轉(zhuǎn)換賽題