【云圖說】第235期 DDS讀寫兩步走 帶您領略只讀節點的風采
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 代碼的根目錄中。
在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是 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小時內刪除侵權內容。