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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-02 10:42 ? 次閱讀

UIAbility 組件間交互(設備內)

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

啟動應用內的 UIAbility

在一個應用內部存在多個 UIAbility 時,可能需要從一個 UIAbility 啟動另一個 UIAbility。例如,在支付應用中,從主界面 UIAbility 啟動收款 UIAbility。下面是一個示例代碼,演示了如何在 EntryAbility 中啟動 FuncAbility:

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

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

在 FuncAbility 中,可以通過生命周期回調方法 onCreate 接收來自 EntryAbility 傳遞的參數(shù)

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

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

啟動應用內的 UIAbility 并獲取返回結果

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

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

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

在 FuncAbility 中,完成業(yè)務后需要調用 terminateSelfWithResult 方法返回結果:

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

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

在調用方的回調中可以獲取返回的結果:

const RESULT_CODE: number = 1001;

// ...

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

啟動其他應用的 UIAbility

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

wKgZomW7jsKAfaq_AAFcfr-bD2E344.pngwKgaomW7joCAdQk-AAFcfr-bD2E259.png

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

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

啟動其他應用的 UIAbility 并獲取返回結果

如果需要獲取其他應用 UIAbility 的返回結果,可以使用 startAbilityForResult 方法:

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

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

在被調用方的 UIAbility 中,需要調用 terminateSelfWithResult 方法返回結果:

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

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

在調用方的回調中可以獲取返回的結果:

const RESULT_CODE: number = 1001;

// ...

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

這些示例展示了在設備

內進行 UIAbility 之間交互的常見場景和方法,希望對您的應用程序開發(fā)有所幫助。

通過 Call 調用實現(xiàn) UIAbility 交互(僅對系統(tǒng)應用開放)

在某些情況下,需要通過 Call 調用來實現(xiàn) UIAbility 之間的交互。這種方式通常僅對系統(tǒng)應用開放。以下是一個簡單的示例,演示了如何通過 Call 調用實現(xiàn) UIAbility 的交互:

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

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

在被調用方的 UIAbility 中,需要實現(xiàn) onCall 方法來處理 Call 調用:

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

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

這里使用了 onCall 方法來處理調用傳遞過來的信息,并返回相應的結果。

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

wKgaomW7jsKARoYJAAEqdTboeZk392.pngwKgZomW7jpaAcE63AAEqdTboeZk756.png

注意事項與最佳實踐

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

1.權限和安全性: 確保對敏感信息和操作進行適當?shù)臋嘞迿z查,以保障用戶隱私和應用的安全性。合理使用能力分級和權限管理機制。

2.錯誤處理: 對于 UIAbility 之間的交互,及時而有效的錯誤處理是至關重要的。在使用 catch 捕獲錯誤時,可以提供友好的用戶提示或記錄詳細的日志以便追蹤和調試。

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

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

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

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

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

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

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

審核編輯 黃宇

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

    關注

    1

    文章

    66

    瀏覽量

    14772
  • 鴻蒙
    +關注

    關注

    56

    文章

    2267

    瀏覽量

    42485
收藏 人收藏

    評論

    相關推薦

    HarmonyOS開發(fā)案例:【UIAbilityUIAbility間頁面的跳轉】

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

    鴻蒙開發(fā)-應用程序框架UIAbility的使用

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

    鴻蒙應用開發(fā)入門資料合集

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

    HarmonyOS Connect鴻蒙智聯(lián)水杯交互設計智慧生活APP線上開發(fā)注意事項與主要步驟

    注意:產品定義時,只選擇智慧生活APP。注意:選擇線上開發(fā),就不需要線下開發(fā)的相關內容了。 理論上來講,只是最簡單的交互設計方式,就是智慧生活APP線上鏈接的
    發(fā)表于 07-20 14:33

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

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

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

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

    鴻蒙OS開發(fā):【一次開發(fā),多端部署】應用(交互歸一)

    對于不同類型的智能設備,用戶可能有不同的交互方式,如通過觸摸屏、鼠標、觸控板等。如果針對不同的交互方式單獨做適配,會增加
    的頭像 發(fā)表于 05-17 15:31 ?309次閱讀
    <b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發(fā)</b>:【一次<b class='flag-5'>開發(fā)</b>,多端部署】應用(<b class='flag-5'>交互</b>歸一)

    鴻蒙OS開發(fā):典型頁面場景【一次開發(fā),多端部署】(交互歸一)

    對于不同類型的智能設備,用戶可能有不同的交互方式,如通過觸摸屏、鼠標、觸控板等。如果針對不同的交互方式單獨做適配,會增加
    的頭像 發(fā)表于 05-27 14:16 ?297次閱讀
    <b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發(fā)</b>:典型頁面場景【一次<b class='flag-5'>開發(fā)</b>,多端部署】(<b class='flag-5'>交互</b>歸一)

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

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

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

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

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

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

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

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

    鴻蒙Ability Kit(程序框架服務)【UIAbility組件間交互設備)】

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

    鴻蒙Ability Kit(程序框架服務)【UIAbilityUIAbility間頁面的跳轉】

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

    鴻蒙開發(fā)Ability Kit程序框架服務:FA模型啟動Stage模型UIAbility

    本文介紹FA模型的三種應用組件如何啟動Stage模型的UIAbility組件。
    的頭像 發(fā)表于 06-25 16:00 ?259次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>Ability Kit程序框架服務:FA模型啟動Stage模型<b class='flag-5'>UIAbility</b>