鴻蒙學習筆記之Ability 組件

      網友投稿 1091 2025-03-31

      關于 Ability

      與 Android Activity相比,Activity 是 Android 應用的四大組件之一, 它提供一個窗口用于應用在其中繪制界面,用戶可以在界面上完成交互動作。

      HarmonyOS Ability 是應用所具備能力的抽象。Ability 的中文含義即能力,代表了 HarmonyOS 工程中最重要最核心的功能,也是應用程序的原子化基礎組件。一個HarmonyOS應用可以包含多個Ability, Ability可以分為:

      Feature Ability(簡稱FA),有界面,也被稱為元程序

      Particle Ability(簡稱PA),無界面,也被稱為元服務

      FA 類似于 Android 的 Activity ;PA 類似于 Android 的Services

      而 FA 支持 Page Ability,代表了 UI 的能力:

      Page 模板是FA唯一支持的模板,用于提供與用戶交互的能力。一個Page實例可以包含一組相關頁面,每個頁面用一個AbilitySlice實例表示。

      而 PA 支持 Service Ability 和 Data Ability

      Service 模板:用于提供后臺運行任務的能力,提供應用服務,例如播放音樂等。

      Data 模板:用于對外部提供統一的數據訪問抽象,提供了統一的數據訪問接口,方便 FA 的統一調用,例如對本地文件的讀取。

      使用 Ability 時必須在配置文件 config.json 中注冊該 Ability ,設置相應的屬性,該文件存儲在每個應用程序的 Java 代碼的根目錄中。

      鴻蒙學習筆記之Ability 組件

      在Java中,Ability是一個類。事實上,鴻蒙應用程序的開發就是對Ability進行繼承并進行應用擴展。所有的應用程序的功能最終必須要體現在開發者所創建的Ability的子類中。

      Page Ability

      Page Ability 是 Feature Ability 唯一支持的模板。用于提供與用戶的交互能力,其實就是頁面的父級。一個 Page 可以由一個或多個 AbilitySlice 構成,AbilitySlice 是指應用的單個頁面及其控制邏輯的總和。官方認為當一個 Page 由多個 AbilitySlice 共同構成時,這些 AbilitySlice 頁面提供的業務能力應具有高度相關性。

      在配置文件(config.json)中注冊 Ability 時,可以通過配置 Ability 元素中的 “type” 屬性來指定 Ability 模板類型,示例如下:

      { "module": { ... "abilities": [ { ... "type": "page" ... } ] ... } ... }

      Page Ability 的生命周期

      Ability生命周期介紹(Ability Life Cycle)是Ability被調度到INACTIVE、ACTIVE、BACKGROUND等各個狀態的統稱(主要涉及PageAbility類型和ServiceAbility類型的Ability)

      PageAbility類型的Ability生命周期流轉如下圖所示:

      主要生命周期如下 :

      首先初始化 Ability , 初始化完畢后狀態是 INITIAL 狀態

      2.初始化完成后, 會調用 onStart() 方法 , 初始化 UI 界面中使用到的控件和變量, 執行完畢后狀態變為 INACTIVE 狀態

      快要顯示時, 會調用 onActive() 方法 , 狀態變為 ACTIVE 狀態

      如果由于某些原因, 該 Page Ability 失去焦點, 進入后臺, 如彈出對話框, 另一個 Page Ability 前臺顯示, 會回調 onInactive() 方法 , 狀態變為 INACTIVE 狀態

      窗口徹底不顯示, 但是還處于后臺狀態, 會回調 onBackground() 方法, 狀態變 BACKGROUND 狀態

      有幾種特殊情況:

      如果當前處于 INACTIVE 狀態, 用戶返回 Page Ability, 則回調 onActive() 方法, 進入 ACTIVE 狀態 ;

      如果當前的 Page Ability 處于 BACKGROUND 狀態, 當用戶從后臺返回前臺時, 會回調 onForeground() 方法, 狀態變為 INACTIVE 狀態;

      如果當前的 Page Ability 處于 BACKGROUND 狀態, 當該 Ability 徹底銷毀, 正在結束, 因內存不足終止, 用戶重新進入該界面時, 會回調 onStop() 方法 , 狀態變為 INITIAL 狀態 ;

      生命周期圖如下:

      Service Ability

      Service Ability 是 Particle Ability 支持的模板之一。用于后臺運行任務(如執行音樂播放、文件下載等),但不提供用戶交互界面。

      Service 可由其他應用或 Ability 啟動,即使用戶切換到其他應用,Service 仍將在后臺繼續運行。

      Service 是單實例的。在一個設備上,相同的Service 只會存在一個實例。如果多個 Ability 共用這個實例,只有當與 Service 綁定的所有 Ability 都退出后,Service 才能夠退出。

      由于 Service 是在主線程里執行的,因此,如果在 Service 里面的操作時間過長,開發者必須在 Service 里創建新的線程來處理,防止造成主線程阻塞,應用程序無響應。

      sevice ability 生命周期

      與 Page 類似,Service 也擁有生命周期,如圖所示。根據調用方法的不同,其生命周期有以下兩種路徑:

      啟動 Service

      該 Service 在其他 Ability 調用startAbility()時創建,然后保持運行。其他 Ability 通過調用stopAbility()來停止 Service,Service 停止后,系統會將其銷毀。

      連接 Service

      該 Service 在其他 Ability 調用 connectAbility() 時創建,客戶端可通過調用 disconnectAbility() 斷開連接。多個客戶端可以綁定到相同 Service,而且當所有綁定全部取消后,系統即會銷毀該 Service。

      connectAbility() 也可以連接通過startAbility() 創建的 Service 。

      在配置文件中,“module > abilities”字段下對當前Service做如下配置:

      { "module": { ... "abilities": [ { ... "name": ".ServiceAbility", "type": "service", "visible": true, ... } ] ... } ... }

      Data Ability

      Data Ability是 Particle Ability支持的模板之一。用于應用管理其自身和其他應用存儲數據的訪問,并提供與其他應用共享數據的方法。

      Data 既可用于同設備不同應用的數據共享,也支持跨設備不同應用的數據共享。

      數據的存放形式多樣,可以是數據庫,也可以是磁盤上的文件。Data 對外提供對數據的增、刪、改、查,以及打開文件等接口,這些接口的具體實現由開發者提供。

      URI 介紹

      Data 的提供方和使用方都通過 URI(Uniform Resource Identifier)來標識一個具體的數據,例如數據庫中的某個表或磁盤上的某個文件。URI 的組成圖如下:

      HarmonyOS 的 URI 仍基于 URI 通用標準,格式如下:

      scheme:協議方案名,固定為“dataability”,代表Data Ability所使用的協議類型。

      authority:設備ID。如果為跨設備場景,則為目標設備的ID;如果為本地設備場景,則不需要填寫。

      path:資源的路徑信息,代表特定資源的位置信息。

      query:查詢參數。

      fragment:可以用于指示要訪問的子資源。

      URI 示例:

      跨設備場景:dataability://device_id/com.domainname.dataability.persondata/person/10

      本地設備:dataability:///com.domainname.dataability.persondata/person/10

      在配置文件中,“module > abilities”字段下對當前 Data 做如下配置:

      { "module": { ... "abilities": [ { ... "type": "data" ... } ] ... } ... }

      總結

      本文簡單對 Ability 進行介紹,后文將根據具體的應用學習來更加了解 Ability 的創建與使用,歡迎大家一起加入學習。

      參考資料:

      - 鴻蒙中ability和Android Activity 有什么區別?

      - Ability

      Android HarmonyOS

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel如何提取人名(表格怎么提取人名)
      下一篇:PPT不能插入表格(ppt里面插不了表格怎么回事)
      相關文章
      亚洲成AV人片在线观看无码 | 国产亚洲综合色就色| 亚洲国产视频久久| 亚洲经典在线观看| 亚洲精品无码乱码成人| 亚洲一区二区三区偷拍女厕| 亚洲一区二区三区在线播放| 亚洲视频在线精品| 亚洲精品国产va在线观看蜜芽| 亚洲人成人无码.www石榴| 亚洲综合无码一区二区痴汉| 亚洲精品国产日韩| 亚洲国产午夜精品理论片在线播放| 久久亚洲精品国产亚洲老地址| 国产精品亚洲午夜一区二区三区| 亚洲av产在线精品亚洲第一站| 亚洲熟妇色自偷自拍另类| 亚洲成人免费网址| 亚洲欧洲日韩极速播放| 欧洲 亚洲 国产图片综合| 亚洲美国产亚洲AV| 毛片亚洲AV无码精品国产午夜| 亚洲 综合 国产 欧洲 丝袜 | 亚洲成a人片在线观看中文动漫| 亚洲国产精品自在在线观看| 久久精品a亚洲国产v高清不卡| 亚洲色偷偷av男人的天堂| 亚洲人成片在线观看| 77777亚洲午夜久久多喷| 亚洲欧美日韩一区二区三区在线| 日韩精品亚洲专区在线影视| 午夜亚洲乱码伦小说区69堂| 国产成人99久久亚洲综合精品 | 亚洲中文字幕第一页在线| 国产亚洲A∨片在线观看| 中文字幕亚洲精品资源网| 亚洲jjzzjjzz在线播放| 亚洲国产成人无码AV在线影院| 亚洲成av人片在线观看天堂无码| 在线观看国产区亚洲一区成人| 亚洲AV无码成人精品区在线观看|