一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

鴻蒙開(kāi)發(fā)丨設(shè)備內(nèi) UIAbility 的幾種交互方式

王程 ? 來(lái)源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-02 10:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

UIAbility 組件間交互(設(shè)備內(nèi))

在設(shè)備內(nèi),UIAbility(用戶界面能力)是系統(tǒng)調(diào)度的最小單元,它們負(fù)責(zé)展示用戶界面和執(zhí)行相關(guān)的業(yè)務(wù)邏輯。設(shè)備內(nèi)的不同功能模塊之間的交互是應(yīng)用程序開(kāi)發(fā)中的重要部分。本文將探討設(shè)備內(nèi) UIAbility 之間的交互方式,包括啟動(dòng)應(yīng)用內(nèi)的 UIAbility、啟動(dòng)其他應(yīng)用的 UIAbility 以及通過(guò) Call 調(diào)用實(shí)現(xiàn) UIAbility 交互。

啟動(dòng)應(yīng)用內(nèi)的 UIAbility

在一個(gè)應(yīng)用內(nèi)部存在多個(gè) UIAbility 時(shí),可能需要從一個(gè) UIAbility 啟動(dòng)另一個(gè) UIAbility。例如,在支付應(yīng)用中,從主界面 UIAbility 啟動(dòng)收款 UIAbility。下面是一個(gè)示例代碼,演示了如何在 EntryAbility 中啟動(dòng) FuncAbility:

let wantInfo = {
    deviceId: '', // deviceId為空表示本設(shè)備
    bundleName: 'com.example.myapplication',
    abilityName: 'FuncAbility',
    moduleName: 'module1', // moduleName非必選
    parameters: { // 自定義信息
        info: '來(lái)自EntryAbility Index頁(yè)面',
    },
};

// context為調(diào)用方UIAbility的AbilityContext
this.context.startAbility(wantInfo).then(() => {
    // 處理啟動(dòng)成功后的邏輯
}).catch((err) => {
    // 處理啟動(dòng)失敗后的邏輯
});

在 FuncAbility 中,可以通過(guò)生命周期回調(diào)方法 onCreate 接收來(lái)自 EntryAbility 傳遞的參數(shù):

import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';

export default class FuncAbility extends UIAbility {
    onCreate(want, launchParam) {
        // 接收調(diào)用方UIAbility傳過(guò)來(lái)的參數(shù)
        let funcAbilityWant = want;
        let info = funcAbilityWant?.parameters?.info;
        // ...
    }
}

啟動(dòng)應(yīng)用內(nèi)的 UIAbility 并獲取返回結(jié)果

有時(shí)候,我們希望從一個(gè) UIAbility 啟動(dòng)另一個(gè) UIAbility,并在后者完成業(yè)務(wù)后獲取返回結(jié)果。例如,在登錄 UIAbility 完成登錄操作后,將登錄結(jié)果返回給主界面 UIAbility。下面是一個(gè)示例代碼:

let wantInfo = {
    deviceId: '', // deviceId為空表示本設(shè)備
    bundleName: 'com.example.myapplication',
    abilityName: 'FuncAbility',
    moduleName: 'module1', // moduleName非必選
    parameters: { // 自定義信息
        info: '來(lái)自EntryAbility Index頁(yè)面',
    },
};

// context為調(diào)用方UIAbility的AbilityContext
this.context.startAbilityForResult(wantInfo).then((data) => {
    // 處理從FuncAbility返回的結(jié)果
}).catch((err) => {
    // 處理啟動(dòng)失敗后的邏輯
});

在 FuncAbility 中,完成業(yè)務(wù)后需要調(diào)用 terminateSelfWithResult 方法返回結(jié)果:

const RESULT_CODE: number = 1001;
let abilityResult = {
    resultCode: RESULT_CODE,
    want: {
        bundleName: 'com.example.myapplication',
        abilityName: 'FuncAbility',
        moduleName: 'module1',
        parameters: {
            info: '來(lái)自FuncAbility Index頁(yè)面',
        },
    },
};

// context為被調(diào)用方UIAbility的AbilityContext
this.context.terminateSelfWithResult(abilityResult, (err) => {
    // 處理停止自身后的邏輯
});

在調(diào)用方的回調(diào)中可以獲取返回的結(jié)果:

const RESULT_CODE: number = 1001;

// ...

// context為調(diào)用方UIAbility的AbilityContext
this.context.startAbilityForResult(want).then((data) => {
    if (data?.resultCode === RESULT_CODE) {
        // 解析被調(diào)用方UIAbility返回的信息
        let info = data.want?.parameters?.info;
        // 處理返回的結(jié)果
    }
}).catch((err) => {
    // 處理啟動(dòng)失敗后的邏輯
});

啟動(dòng)其他應(yīng)用的 UIAbility

有時(shí)候,我們需要啟動(dòng)其他應(yīng)用的 UIAbility。這可以通過(guò)隱式 Want 啟動(dòng)實(shí)現(xiàn),系統(tǒng)會(huì)根據(jù)調(diào)用方提供的條件匹配適當(dāng)?shù)?UIAbility。

wKgZomW7jsKAfaq_AAFcfr-bD2E344.pngwKgaomW7joCAdQk-AAFcfr-bD2E259.png

let wantInfo = {
    deviceId: '', // deviceId為空表示本設(shè)備
    action: 'ohos.want.action.viewData',
    entities: ['entity.system.default'],
};

// context為調(diào)用方UIAbility的AbilityContext
this.context.startAbility(wantInfo).then(() => {
    // 處理啟動(dòng)成功后的邏輯
}).catch((err) => {
    // 處理啟動(dòng)失敗后的邏輯
});

啟動(dòng)其他應(yīng)用的 UIAbility 并獲取返回結(jié)果

如果需要獲取其他應(yīng)用 UIAbility 的返回結(jié)果,可以使用 startAbilityForResult 方法:

let wantInfo = {
    deviceId: '', // deviceId為空表示本設(shè)備
    action: 'ohos.want.action.editData',
    entities: ['entity.system.default'],
};

// context為調(diào)用方UIAbility的AbilityContext
this.context.startAbilityForResult(wantInfo).then((data) => {
    // 處理從其他應(yīng)用UIAbility返回的結(jié)果
}).catch((err) => {
    // 處理啟動(dòng)失敗后的邏輯
});

在被調(diào)用方的 UIAbility 中,需要調(diào)用 terminateSelfWithResult 方法返回結(jié)果:

const RESULT_CODE: number = 1001;
let abilityResult = {
    resultCode: RESULT_CODE,
    want: {
        bundleName: 'com.example.myapplication',
        abilityName: 'EntryAbility',
        moduleName: 'entry',
        parameters: {
            payResult: 'OKay',
        },
    },
};

// context為被調(diào)用方UIAbility的AbilityContext
this.context.terminateSelfWithResult(abilityResult, (err) => {
    // 處理停止自身后的邏輯
});

在調(diào)用方的回調(diào)中可以獲取返回的結(jié)果:

const RESULT_CODE: number = 1001;

// ...

// context為調(diào)用方UIAbility的AbilityContext
this.context.startAbilityForResult(want).then((data) => {
    if (data?.resultCode === RESULT_CODE) {
        // 解析被調(diào)用方UIAbility返回的信息
        let payResult = data.want?.parameters?.payResult;
        // 處理返回的結(jié)果
    }
}).catch((err) => {
    // 處理啟動(dòng)失敗后的邏輯
});

這些示例展示了在設(shè)備

內(nèi)進(jìn)行 UIAbility 之間交互的常見(jiàn)場(chǎng)景和方法,希望對(duì)您的應(yīng)用程序開(kāi)發(fā)有所幫助。

通過(guò) Call 調(diào)用實(shí)現(xiàn) UIAbility 交互(僅對(duì)系統(tǒng)應(yīng)用開(kāi)放)

在某些情況下,需要通過(guò) Call 調(diào)用來(lái)實(shí)現(xiàn) UIAbility 之間的交互。這種方式通常僅對(duì)系統(tǒng)應(yīng)用開(kāi)放。以下是一個(gè)簡(jiǎn)單的示例,演示了如何通過(guò) Call 調(diào)用實(shí)現(xiàn) UIAbility 的交互:

let wantInfo = {
    deviceId: '', // deviceId為空表示本設(shè)備
    abilityName: 'SystemAbility',
    parameters: {
        operation: 'performTask',
        task: 'someTask',
    },
};

// context為調(diào)用方UIAbility的AbilityContext
this.context.call(wantInfo).then((data) => {
    // 處理Call調(diào)用返回的結(jié)果
}).catch((err) => {
    // 處理Call調(diào)用失敗后的邏輯
});

在被調(diào)用方的 UIAbility 中,需要實(shí)現(xiàn) onCall 方法來(lái)處理 Call 調(diào)用:

import UIAbility from '@ohos.app.ability.UIAbility';

export default class SystemAbility extends UIAbility {
    onCall(message) {
        // 處理Call調(diào)用傳遞過(guò)來(lái)的信息
        let operation = message?.operation;
        let task = message?.task;
        // ...
        
        // 返回Call調(diào)用的結(jié)果
        return {
            result: 'Task performed successfully',
        };
    }
}

這里使用了 onCall 方法來(lái)處理調(diào)用傳遞過(guò)來(lái)的信息,并返回相應(yīng)的結(jié)果。

總體而言,通過(guò) startAbility、startAbilityForResult、call 等方法,UIAbility 之間可以實(shí)現(xiàn)靈活的交互,滿足各種應(yīng)用場(chǎng)景的需求。在實(shí)際開(kāi)發(fā)中,需要根據(jù)具體業(yè)務(wù)需求選擇合適的方式進(jìn)行 UIAbility 之間的通信,并確保良好的用戶體驗(yàn)和應(yīng)用的穩(wěn)定性。

wKgaomW7jsKARoYJAAEqdTboeZk392.pngwKgZomW7jpaAcE63AAEqdTboeZk756.png

注意事項(xiàng)與最佳實(shí)踐

在進(jìn)行 UIAbility 之間的交互時(shí),開(kāi)發(fā)者應(yīng)該注意一些重要的事項(xiàng)和最佳實(shí)踐,以確保應(yīng)用程序的性能、穩(wěn)定性和用戶體驗(yàn)。

1.權(quán)限和安全性: 確保對(duì)敏感信息和操作進(jìn)行適當(dāng)?shù)臋?quán)限檢查,以保障用戶隱私和應(yīng)用的安全性。合理使用能力分級(jí)和權(quán)限管理機(jī)制。

2.錯(cuò)誤處理: 對(duì)于 UIAbility 之間的交互,及時(shí)而有效的錯(cuò)誤處理是至關(guān)重要的。在使用 catch 捕獲錯(cuò)誤時(shí),可以提供友好的用戶提示或記錄詳細(xì)的日志以便追蹤和調(diào)試。

3.業(yè)務(wù)場(chǎng)景設(shè)計(jì): 在設(shè)計(jì) UIAbility 之間的交互時(shí),充分考慮業(yè)務(wù)場(chǎng)景和用戶行為。確保交互邏輯符合用戶的預(yù)期,提高用戶體驗(yàn)。

4.數(shù)據(jù)傳遞: 良好的數(shù)據(jù)傳遞機(jī)制是 UIAbility 之間交互的核心。在傳遞數(shù)據(jù)時(shí),要確保數(shù)據(jù)的準(zhǔn)確性、完整性,并進(jìn)行必要的驗(yàn)證。

5.生命周期管理: 注意 UIAbility 的生命周期管理,合理使用 startAbilityForResult 和 terminateSelfWithResult 等方法,確保 UIAbility 的啟動(dòng)和停止順序合理。

6.異步編程 由于 UIAbility 之間的交互通常是異步的,確保在合適的時(shí)機(jī)處理異步回調(diào),避免阻塞用戶界面。

7.性能優(yōu)化: 對(duì)于頻繁啟動(dòng)和停止 UIAbility 的情況,考慮性能優(yōu)化,減少資源消耗,提高應(yīng)用響應(yīng)速度。

8.代碼規(guī)范: 遵循良好的代碼規(guī)范和開(kāi)發(fā)規(guī)范,使代碼易讀、易維護(hù),并且能夠適應(yīng)未來(lái)的擴(kuò)展和更新。

在實(shí)際應(yīng)用中,以上這些建議可以根據(jù)具體的業(yè)務(wù)需求進(jìn)行調(diào)整和擴(kuò)展。通過(guò)合理的 UIAbility 之間的交互,開(kāi)發(fā)者可以實(shí)現(xiàn)更加豐富和復(fù)雜的應(yīng)用功能,為用戶提供更好的使用體驗(yàn)。

審核編輯 黃宇

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

    關(guān)注

    1

    文章

    72

    瀏覽量

    15158
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2620

    瀏覽量

    44058
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS開(kāi)發(fā)案例:【UIAbility內(nèi)UIAbility間頁(yè)面的跳轉(zhuǎn)】

    基于Stage模型下的UIAbility開(kāi)發(fā),實(shí)現(xiàn)UIAbility內(nèi)UIAbility間頁(yè)面的跳轉(zhuǎn)。
    的頭像 發(fā)表于 05-09 15:06 ?2215次閱讀
    HarmonyOS<b class='flag-5'>開(kāi)發(fā)</b>案例:【<b class='flag-5'>UIAbility</b><b class='flag-5'>內(nèi)</b>和<b class='flag-5'>UIAbility</b>間頁(yè)面的跳轉(zhuǎn)】

    鴻蒙開(kāi)發(fā)-應(yīng)用程序框架UIAbility的使用

    UIAbility概述 UIAbility是一種包含用戶界面的應(yīng)用組件,主要用于和用戶進(jìn)行交互。UIAbility也是系統(tǒng)調(diào)度的單元,為應(yīng)用提供窗口在其中繪制界面。 每一個(gè)
    發(fā)表于 01-17 16:36

    UIAbility組件與UI的數(shù)據(jù)同步介紹

    UIAbility組件與UI的數(shù)據(jù)同步 基于當(dāng)前的應(yīng)用模型,可以通過(guò)以下幾種方式來(lái)實(shí)現(xiàn)UIAbility組件與UI之間的數(shù)據(jù)同步。 使用EventHub進(jìn)行數(shù)據(jù)通信:在基類Cont
    發(fā)表于 05-16 06:10

    UIAbility組件間交互設(shè)備內(nèi))說(shuō)明

    UIAbility,也可以是其他應(yīng)用的UIAbility(例如啟動(dòng)三方支付UIAbility)。 本文將從如下場(chǎng)景分別介紹設(shè)備內(nèi)
    發(fā)表于 05-16 06:12

    鴻蒙應(yīng)用開(kāi)發(fā)入門(mén)資料合集

    1、鴻蒙應(yīng)用開(kāi)發(fā)入門(mén)資料一:鴻蒙系統(tǒng)的概述1.1 鴻蒙系統(tǒng)是一個(gè)什么樣的系統(tǒng),亮點(diǎn)在哪里 官網(wǎng)首頁(yè)上一句話告訴了我們鴻蒙系統(tǒng)是一個(gè)什么樣的系
    發(fā)表于 03-22 11:23

    HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-Stage模型UIAbility組件使用(一)

    一、UIAbility組件概述1.概述 UIAbility組件是一種包含UI界面的應(yīng)用組件,主要用于和用戶交互。 UIAbility組件是系統(tǒng)調(diào)度的基本單元,為應(yīng)用提供繪制界面的窗口;
    發(fā)表于 06-28 10:32

    HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-Stage模型UIAbility組件使用(一)

    一、UIAbility組件概述1.概述 UIAbility組件是一種包含UI界面的應(yīng)用組件,主要用于和用戶交互。 UIAbility組件是系統(tǒng)調(diào)度的基本單元,為應(yīng)用提供繪制界面的窗口;
    發(fā)表于 06-28 10:32

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件概述】

    UIAbility組件是一種包含UI的應(yīng)用組件,主要用于和用戶交互。
    的頭像 發(fā)表于 05-30 20:17 ?780次閱讀
    <b class='flag-5'>鴻蒙</b>Ability Kit(程序框架服務(wù))【<b class='flag-5'>UIAbility</b>組件概述】

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件啟動(dòng)模式】

    UIAbility的啟動(dòng)模式是指UIAbility實(shí)例在啟動(dòng)時(shí)的不同呈現(xiàn)狀態(tài)。針對(duì)不同的業(yè)務(wù)場(chǎng)景,系統(tǒng)提供了三種啟動(dòng)模式:
    的頭像 發(fā)表于 06-06 11:05 ?1350次閱讀
    <b class='flag-5'>鴻蒙</b>Ability Kit(程序框架服務(wù))【<b class='flag-5'>UIAbility</b>組件啟動(dòng)模式】

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件基本用法】

    UIAbility組件的基本用法包括:指定UIAbility的啟動(dòng)頁(yè)面以及獲取UIAbility的上下文[UIAbilityContext]。
    的頭像 發(fā)表于 06-06 11:02 ?913次閱讀
    <b class='flag-5'>鴻蒙</b>Ability Kit(程序框架服務(wù))【<b class='flag-5'>UIAbility</b>組件基本用法】

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件與UI的數(shù)據(jù)同步】

    基于當(dāng)前的應(yīng)用模型,可以通過(guò)以下幾種方式來(lái)實(shí)現(xiàn)UIAbility組件與UI之間的數(shù)據(jù)同步。
    的頭像 發(fā)表于 06-03 10:26 ?866次閱讀
    <b class='flag-5'>鴻蒙</b>Ability Kit(程序框架服務(wù))【<b class='flag-5'>UIAbility</b>組件與UI的數(shù)據(jù)同步】

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件間交互設(shè)備內(nèi))】

    UIAbility是系統(tǒng)調(diào)度的最小單元。在設(shè)備內(nèi)的功能模塊之間跳轉(zhuǎn)時(shí),會(huì)涉及到啟動(dòng)特定的UIAbility,該UIAbility可以是應(yīng)用
    的頭像 發(fā)表于 06-03 09:53 ?1109次閱讀
    <b class='flag-5'>鴻蒙</b>Ability Kit(程序框架服務(wù))【<b class='flag-5'>UIAbility</b>組件間<b class='flag-5'>交互</b>(<b class='flag-5'>設(shè)備</b><b class='flag-5'>內(nèi)</b>)】

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility內(nèi)UIAbility間頁(yè)面的跳轉(zhuǎn)】

    基于Stage模型下的UIAbility開(kāi)發(fā),實(shí)現(xiàn)UIAbility內(nèi)UIAbility間頁(yè)面的跳轉(zhuǎn)。
    的頭像 發(fā)表于 06-03 14:13 ?1299次閱讀
    <b class='flag-5'>鴻蒙</b>Ability Kit(程序框架服務(wù))【<b class='flag-5'>UIAbility</b><b class='flag-5'>內(nèi)</b>和<b class='flag-5'>UIAbility</b>間頁(yè)面的跳轉(zhuǎn)】

    【HarmonyOS 5】鴻蒙中的UIAbility詳解(三)

    【HarmonyOS 5】鴻蒙中的UIAbility詳解(三) ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用
    的頭像 發(fā)表于 06-14 22:32 ?48次閱讀

    【HarmonyOS 5】鴻蒙中的UIAbility詳解(二)

    【HarmonyOS 5】鴻蒙中的UIAbility詳解(二) ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用
    的頭像 發(fā)表于 07-11 18:17 ?268次閱讀
    【HarmonyOS 5】<b class='flag-5'>鴻蒙</b>中的<b class='flag-5'>UIAbility</b>詳解(二)