本節概述數據庫
什麼是Ability編程
Ability意爲能力,是HarmonyOS應用程序提供的抽象功能。在Android應用程序中,Activity是整個應用程序的核心,其意爲活動。不管是活動仍是能力都是一種表述形式,雖然直譯後理解起來比較抽象,但若是咱們把它們理解爲功能,這樣就比較方便了。分佈式
就目前單一設備而言,咱們可使用手機打電話,發短信,玩遊戲等,這些就是手機具備能力。在生活中,能力的體現無處不在,好比電飯煲具備蒸煮煲湯的能力;電視具備播放視頻的能力;音響具備外放音樂的能力。ide
但HarmonyOS分佈式系統所要實現的不單單是單一的能力,它所要達到的效果是能力能夠單獨存在,能夠互相關聯,能夠彼此調用互相遷移。好比能夠將手機端播放的視頻遷移到智慧屏,經過大屏來觀看視頻,同時也能夠將視頻音效分離到外設音響;經過設備A獲取設備B的數據;多設備終端數據同步等。post
在HarmonyOS分佈式系統中,一切皆能力,能力無大小。在HarmonyOS應用程序中,一個頁面即一種能力,如登陸頁面,即具備登陸功能的能力;一個服務即一種能力,如後臺播放音樂的能力;一個數據操做即一種能力,如獲取數據庫數據等。同時能力之間也能夠互相調用,經過頁面能力來管理後臺音效播放與暫停。ui
面向對象編程中一切皆對象,在HarmonyOS中一切皆能力。url
Ability分類spa
一個HarmonyOS應用程序能夠包含一個或多個能力。HarmonyOS應用程序能夠以能力爲單位進行部署。在HarmonyOS應用程序中將能力分爲FA(Feature Ability,即元程序)和PA(Particle Ability,即元服務)兩種類型,針對兩種類型提供了不一樣的模板能夠在平常業務開發中直接使用。.net
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頁面隱藏。這種狀態的頁面在內存不足狀況下會被銷燬。
整個完整的生命週期圖以下所示(來自官方):
注(翻譯錯誤):圖中因爲內存不足或用戶跳轉到該能力以後能力被系統銷燬改成系統內存不足等緣由致使終止能力,用戶從新導航到該能力。
全部頁面能力都必須從重寫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/