鴻蒙應用程序Ability(能力)看這一篇就夠


本節概述

什么是Ability
Ability分類
Ability生命周期
Ability之間跳轉

什么是Ability

Ability意為能力,是HarmonyOS應用程序提供的抽象功能。在Android應用程序中,Activity是整個應用程序的核心,其意為活動。無論是活動還是能力都是一種表述形式,雖然直譯后理解起來比較抽象,但如果我們把它們理解為功能,這樣就比較方便了。

就目前單一設備而言,我們可以使用手機打電話,發短信,玩游戲等,這些就是手機具有能力。在生活中,能力的體現無處不在,比如電飯煲具有蒸煮煲湯的能力;電視具有播放視頻的能力;音響具有外放音樂的能力。

但HarmonyOS分布式系統所要實現的不僅僅是單一的能力,它所要達到的效果是能力可以單獨存在,可以互相關聯,可以彼此調用互相遷移。比如可以將手機端播放的視頻遷移到智慧屏,通過大屏來觀看視頻,同時也可以將視頻音效分離到外設音響;通過設備A獲取設備B的數據;多設備終端數據同步等。

在HarmonyOS分布式系統中,一切皆能力,能力無大小。在HarmonyOS應用程序中,一個頁面即一種能力,如登錄頁面,即具有登錄功能的能力;一個服務即一種能力,如后台播放音樂的能力;一個數據操作即一種能力,如獲取數據庫數據等。同時能力之間也可以互相調用,通過頁面能力來管理后台音效播放與暫停。

面向對象編程中一切皆對象,在HarmonyOS中一切皆能力。

Ability分類

一個HarmonyOS應用程序可以包含一個或多個能力。HarmonyOS應用程序可以以能力為單位進行部署。在HarmonyOS應用程序中將能力分為FA(Feature Ability,即元程序)和PA(Particle Ability,即元服務)兩種類型,針對兩種類型提供了不同的模板可以在日常業務開發中直接使用。

FA支持Page Ability
FA代表有UI界面的能力,被設計用於與用戶交互。直白點就是給用戶提供可操作的頁面,官方根據不同的業務類型提供了不同種類的模板,比如關於頁面、列表頁面、個人中心頁面等,可以根據不同的使用場景來選擇不同的模板,也可以在當前模板的基礎上進行修改以達到功能的快速實現。同時也可以調用PA支持的能力,來實現復雜的業務邏輯,比如在新聞內容頁面通過Service Ability實現后台自動播放音樂。

PA支持Service Ability 和Data Ability
PA代表沒有UI界面的能力,用於支持FA。例如提供數據訪問能力作為數據存儲。Service Ability提供后台運行任務的能力;Data Ability提供插入、刪除、更新、查詢及打開文件的能力。

Ability生命周期

能力有四種生命周期狀態:INITIAL(初始態)、INACTIVE(未激活)、ACTIVE(激活)、BACKGROUND(后台)。
INITIAL: 初始狀態。將即將啟動的能力加載到內存中,但不運行。
INACTIVE:未激活狀態。前台和后台中間的狀態,該狀態下UI可見,但不可操作。
ACTIVE:激活狀態。當前置於前台頁面完整呈現,可交互狀態。
BACKGROUND: 不可見狀態。也稱置於后台,比如A頁面跳轉到B頁面,則B頁面呈現,A頁面隱藏。這種狀態的頁面在內存不足情況下會被銷毀。

整個完整的生命周期圖如下所示(來自官方):

鴻蒙應用程序Ability(能力)看這一篇就夠注(翻譯錯誤):圖中由於內存不足或用戶跳轉到該能力之后能力被系統銷毀改為系統內存不足等原因導致終止能力,用戶重新導航到該能力。

所有頁面能力都必須從重寫onStart()方法開始,該能力的所有生命周期回調方法如下:


    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(HomeAbilitySlice.class.getName());
    }

    @Override
    protected void onActive() {
        super.onActive();
    }

    @Override
    protected void onInactive() {
        super.onInactive();
    }

    @Override
    protected void onBackground() {
        super.onBackground();
    }

    @Override
    protected void onForeground(Intent intent) {
        super.onForeground(intent);
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

這里我們專門寫一個頁面間跳轉來觀察能力的生命周期,使用HiLog日志的形式來查看。運行應用程序並點擊跳轉,然后再返回,日志控制台輸出如下所示。

Ability_Lifecycle: MainAbility onInitialized()方法...
Ability_Lifecycle: MainAbility onStart()方法...
Ability_Lifecycle: MainAbility onActive()方法...
Ability_Lifecycle: MainAbility onInactive()方法...
Ability_Lifecycle: HomeAbility onInitialized()方法...
Ability_Lifecycle: HomeAbility onStart()方法...
Ability_Lifecycle: HomeAbility onActive()方法...
Ability_Lifecycle: MainAbility onBackground()方法...
Ability_Lifecycle: HomeAbility onInactive()方法...
Ability_Lifecycle: MainAbility onForeground()方法...
Ability_Lifecycle: MainAbility onActive()方法...
Ability_Lifecycle: HomeAbility onBackground()方法...
Ability_Lifecycle: HomeAbility onStop()方法...

從日志我們觀察到先啟動MainAbility,當跳轉到HomeAbility時,HomeAbility被激活,而MainAbility進入不可見(也就是后台),當點擊返回按鈕后,MainAbility回到前台並激活,而HomeAbility將不可見並銷毀。

Ability之間跳轉

Ability之間的跳轉是以意圖(Intent)為載體來承載需要對象之間傳遞的信息。通過封裝意圖相關的參數(Parameters)和操作(Operation),可以啟動或跳轉到另一個能力。

    Button button = (Button) findComponentById(ResourceTable.Id_btn);
    button.setClickedListener(l -> {
        Operation operation = new Intent.OperationBuilder()
                .withDeviceId("")
                .withBundleName("com.itming.walking.photokit")
                .withAbilityName("com.itming.walking.photokit.HomeAbility")
                .build();
        intent.setOperation(operation);
        startAbility(intent);
    });

本節主要闡述了能力(Ability)是什么、分類、生命周期及如何使用,后續將對Ability中方法進行詳解,敬請期待...

注:文中若有理解偏差,歡迎一起討論!

作者:雲昌白曉明
想了解更多內容,請訪問51CTO和華為合作共建的鴻蒙社區:https://harmonyos.51cto.com/
本文作者文章合集地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM