開發(fā)前可以了解下鴻蒙: [鴻蒙開發(fā) 序]華為鴻蒙操作系統(tǒng)(HarmonyOS)簡(jiǎn)介及開發(fā)環(huán)境搭建
創(chuàng)新互聯(lián)成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元吉木薩爾做網(wǎng)站,已為上家服務(wù),為吉木薩爾各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
開發(fā)前的準(zhǔn)備:「鴻蒙開發(fā) 1」華為鴻蒙應(yīng)用集成開發(fā)環(huán)境DevEco Studio安裝和設(shè)置
了解鴻蒙應(yīng)用開發(fā)的基本開發(fā)流程:「鴻蒙開發(fā) 2」第一個(gè)華為鴻蒙(HarmonyOS)應(yīng)用程序(App)
本章目標(biāo):
1 了解華為鴻蒙應(yīng)用開發(fā)的可視化(低代碼)方式
2 通過(guò)構(gòu)建一個(gè)簡(jiǎn)單的具有頁(yè)面跳轉(zhuǎn)功能的應(yīng)用
低代碼開發(fā)方式,即通過(guò)可視化界面開發(fā)方式快速構(gòu)建布局、編輯UI界面,可有效降低用戶的上手成本并提升用戶構(gòu)建UI界面的效率。
1 打開DevEco Studio,創(chuàng)建一個(gè)新工程,選擇支持Phone / Tablet / Wearable(手機(jī) / 平板 / s可穿戴)的模板,我們?cè)诖酥苯舆x擇Empty Ability
Project name工程名稱填SuperVisual
Development mode開發(fā)方式選擇Super Visual
其它的可以使用默認(rèn)設(shè)置,點(diǎn)擊完成,進(jìn)入編輯界面
1 在Project(項(xiàng)目)窗口,刪除工程運(yùn)行默認(rèn)的入口文件夾:“entry src main js default pages index”文件夾
2 在Project窗口,選擇工程中的“entry src main js default pages”,單擊鼠標(biāo)右鍵,選擇“New JS Visual”
JS visual name填first,點(diǎn)擊完成,進(jìn)入編輯界面
創(chuàng)建完成后,可以看到“entry src main supervisual default pages page page.visual”的文件目錄結(jié)構(gòu)
3 第一個(gè)頁(yè)面內(nèi)有一個(gè)容器、文本和一個(gè)按鈕,通過(guò)Div、Text和Button組件來(lái)實(shí)現(xiàn)
(1)分別選中first.visual畫面中的Text、Div組件,單擊鼠標(biāo)右鍵,選擇Delete刪除
(2)選中UI Control中的Div組件,將其拖至畫布
點(diǎn)擊右側(cè)屬性樣式欄中的通用樣式圖標(biāo)(General),設(shè)置Div組件的高度Height為100%,使其占滿屏幕
點(diǎn)擊右側(cè)屬性樣式欄中的樣式圖標(biāo)(Flex),設(shè)置Div組件的FlexDirection樣式為column,使Div的主軸垂直;設(shè)置Div組件的JustifyContent樣式為center,使得其子組件在主軸上居中顯示;設(shè)置Div組件的AlignItems樣式為center,使得其子組件在交叉軸上居中顯示
(3)選中UI Control中的Text組件,將其拖至Div組件的中央?yún)^(qū)域
點(diǎn)擊右側(cè)屬性樣式欄中的屬性圖標(biāo)(Properties),設(shè)置Text組件的Content屬性為 “ Hello World ”
點(diǎn)擊右側(cè)屬性樣式欄中的通用樣式圖標(biāo)(General),設(shè)置Text組件的寬(width)為100%,高(height)為100px
點(diǎn)擊右側(cè)屬性樣式欄中的樣式圖標(biāo)(Feature),設(shè)置組件的FontSize樣式為60px,使得其文字放大;設(shè)置組件的TextAlign樣式為center,使得組件文字居中顯示
(4)選中UI Control中的Button組件,將其拖至Text組件下面
點(diǎn)擊右側(cè)屬性樣式欄中的屬性圖標(biāo)(Properties),設(shè)置Button組件的Value屬性為 “ Next ”,
點(diǎn)擊右側(cè)屬性樣式欄中的通用樣式圖標(biāo)(General),設(shè)置按的寬(width)為40%,高(height)為60px
點(diǎn)擊右側(cè)屬性樣式欄中的樣式圖標(biāo)(Feature),設(shè)置組件的FontSize樣式為40px
至此,第一個(gè)頁(yè)面創(chuàng)建完成
我們可以在預(yù)覽窗口中看效果,點(diǎn)擊右側(cè)邊欄的Preview打開預(yù)覽窗口
1 在Project窗口,選擇工程中的“entry src main js default pages”,單擊鼠標(biāo)右鍵,選擇“New JS Visual”
Visual配置界面,JS visual name填second,回車(Enter鍵)或者點(diǎn)擊完成,進(jìn)入編輯界面
2 第二個(gè)頁(yè)面中有一個(gè)容器和文本,通過(guò)Div、Text組件實(shí)現(xiàn),現(xiàn)在編輯器已經(jīng)為我們創(chuàng)建好了,我們就來(lái)修改下它們的屬性(你也可以刪除原有的自己創(chuàng)建,具體步驟參考本章第二節(jié)“二 創(chuàng)建第一個(gè)頁(yè)面”)。
選中Text組件,點(diǎn)擊右側(cè)屬性樣式欄中的屬性圖標(biāo)(Properties),設(shè)置Text組件的Content屬性為 “ Hi,I'm always here. ”
點(diǎn)擊右側(cè)屬性樣式欄中的通用圖標(biāo)(General),設(shè)置組件的寬(width)為100%,高為60px
點(diǎn)擊右側(cè)屬性樣式欄中的樣式圖標(biāo)(Feature),設(shè)置組件的FontSize樣式為36px,TextAlign樣式為center
這樣我們的第二個(gè)頁(yè)面創(chuàng)建成功了
1 在Project窗口,打開工程中的“entry src main js default pages first first.js”, 導(dǎo)入router模塊,頁(yè)面路由router根據(jù)頁(yè)面的uri來(lái)找到目標(biāo)頁(yè)面,從而實(shí)現(xiàn)跳轉(zhuǎn)。示例代碼如下:
2 打開或者切換到first.visual頁(yè)面,選中畫布上的Button組件,點(diǎn)擊右側(cè)屬性樣式欄中的事件圖標(biāo)(Events),鼠標(biāo)點(diǎn)擊Click事件的輸入框,選擇launch事件
3 在預(yù)覽窗口中查看項(xiàng)目效果,點(diǎn)擊Next按鈕后發(fā)現(xiàn)我們的頁(yè)面成功跳轉(zhuǎn)了。
到此,本章的目標(biāo)就完成了。
單從技術(shù)上講,開發(fā)一個(gè)單獨(dú)的操作系統(tǒng)內(nèi)核并沒有想象中的那么困難。網(wǎng)上搜一下 至少能找到幾十個(gè)甚至上百個(gè)OS內(nèi)核實(shí)現(xiàn),雖然絕大多數(shù)只是玩具級(jí)別的,但很多都是麻雀雖小,五臟俱全,基本的功能都有實(shí)現(xiàn)。
先說(shuō)下自己的一些經(jīng)歷吧。
我在幾年前曾經(jīng)從零開始寫過(guò)一個(gè)簡(jiǎn)單的操作系統(tǒng)內(nèi)核,實(shí)現(xiàn)了基本的boot, 內(nèi)存管理,進(jìn)程管理,中斷管理,IPC,簡(jiǎn)單的文件系統(tǒng),簡(jiǎn)單的磁盤驅(qū)動(dòng),鍵盤驅(qū)動(dòng),簡(jiǎn)單的終端等基本功能,還實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的調(diào)試器,支持?jǐn)帱c(diǎn)等基本功能。當(dāng)時(shí)對(duì)操作系統(tǒng)簡(jiǎn)直達(dá)到了癡迷的程度,只要工作上的事情一做完就去看操作系統(tǒng)方面的書籍資料,晚上下班和周末更是幾乎宅在家里不出門,真的可謂是廢寢忘食。
終于在參考了Linux, VxWorks還有國(guó)外一些大牛寫的OS內(nèi)核之后,最后搞出來(lái)了一個(gè)玩具級(jí)的OS內(nèi)核,前后大概持續(xù)了半年左右。當(dāng)時(shí)也純粹是為了學(xué)習(xí)的目的,也是覺得比較好玩,基本功能實(shí)現(xiàn)后,就慢慢遺忘在在磁盤的角落里積灰了。。。
所以,從技術(shù)上說(shuō),開發(fā)一個(gè)OS內(nèi)核并沒有想象中的那么困難,很多大公司其實(shí)技術(shù)上都完全有能力開發(fā)一個(gè)具備基本功能的OS內(nèi)核。當(dāng)然,功能完備性、安全性、性能等方面能不能搞好就另說(shuō)了。
我現(xiàn)在所在的公司,就有完全自主開發(fā)的微內(nèi)核OS,并且在公司上百萬(wàn)臺(tái)的電信級(jí)的分布式集群服務(wù)器產(chǎn)品上已經(jīng)穩(wěn)定運(yùn)行了二十多年。并且,還圍繞這個(gè)OS建立了一系列配套生態(tài),比如基礎(chǔ)開發(fā)庫(kù),一系列配套的開發(fā)調(diào)試工具,甚至還有專門為這個(gè)系統(tǒng)開發(fā)的編程語(yǔ)言和編譯器等。我曾經(jīng)有幾年的主要工作,就是在維護(hù)這個(gè)OS內(nèi)核??上У氖?,這幾年公司已經(jīng)在慢慢用Linux替換這個(gè)OS了,估計(jì)幾年之后就要徹底退役了。
開發(fā)一個(gè)操作系統(tǒng)的真正難點(diǎn)在于創(chuàng)建圍繞在這個(gè)內(nèi)核周邊的生態(tài)系統(tǒng)。一個(gè)單獨(dú)的內(nèi)核遠(yuǎn)遠(yuǎn)不能構(gòu)成一個(gè)完整的系統(tǒng),它需要大量的支持環(huán)境,如系統(tǒng)支持庫(kù),應(yīng)用程序,開發(fā)調(diào)試工具等等,此外還要能夠推廣出去,要有其他上下游的公司愿意使用,能夠被廣大開發(fā)者認(rèn)可并愿意為其開發(fā)新的應(yīng)用等等,這才是真正的難點(diǎn)所在,是需要投入大量人力物力財(cái)力才有可能完成的。
很多公司也正是從技術(shù)積累上,時(shí)間上,成本上,風(fēng)險(xiǎn)上來(lái)考慮,不愿意花大力氣在這上面。所以才有了如今Windows,Linux,Apple三分天下的局面。
咱們國(guó)家雖然急切渴望能有一個(gè)自研的OS,但現(xiàn)狀是,有實(shí)力的廠商更愿意投資一些能看得到摸得著的實(shí)實(shí)在在的應(yīng)用產(chǎn)品上,這樣來(lái)錢快,才能在最短的時(shí)間內(nèi)看到收益回報(bào),也就是更高的投入回報(bào)比。
對(duì)于像操作系統(tǒng),編譯器之類的基礎(chǔ)軟件,除了需要雄厚的技術(shù)實(shí)力外,還需要耗費(fèi)大量的人力財(cái)力物力,而且失敗的風(fēng)險(xiǎn)較大。即便開發(fā)成功,還要花大力氣進(jìn)行推廣,建立周邊生態(tài),這更是需要更大投資,時(shí)間成本也更大,往往需要幾年甚至十幾年時(shí)間才能看得到收益。
這對(duì)于習(xí)慣吃快餐、賺快錢的國(guó)內(nèi)企業(yè)來(lái)說(shuō),根本無(wú)法接受。這也需要企業(yè)決策層領(lǐng)導(dǎo)具有很大的魄力和戰(zhàn)略眼光,但現(xiàn)實(shí)中,這樣的領(lǐng)導(dǎo)簡(jiǎn)直是鳳毛麟角。
這也正是國(guó)內(nèi)廠商大都不愿觸碰自研OS的主要原因,也造成了我國(guó)至今仍沒有自己的操作系統(tǒng)編譯器的局面。
此外,現(xiàn)在市場(chǎng)上對(duì)一個(gè)新的OS的需求其實(shí)也沒有那么急迫,沒有需求,就沒有利益,自然就沒有動(dòng)力。尤其在快餐文化盛行的今天,更是很少有公司愿意去觸碰這吃力不討好的事情。
當(dāng)然也無(wú)須太過(guò)悲觀,任何東西,只要有需求,就會(huì)有利益吸引力,就會(huì)給企業(yè)研究機(jī)構(gòu)足夠的動(dòng)力。相信將來(lái)某一天,一旦Windows, Linux, Apple三巨頭不再適用市場(chǎng)需求,馬上就會(huì)有新的操作系統(tǒng)出現(xiàn)。
或許也用不了等很久吧,畢竟微軟已經(jīng)宣布Win10之后將不會(huì)再有大的Windows更新版本,而Linux雖然現(xiàn)在社區(qū)的開發(fā)仍然很活躍,新的功能仍在被源源不斷的添加進(jìn)去,但也正是由于這個(gè)原因,它現(xiàn)在變成了一個(gè)大而全的通用操作系統(tǒng),已經(jīng)變得越來(lái)越臃腫,很多場(chǎng)景其實(shí)已經(jīng)不是很適用了,只是沒有更好的替代品,很多公司又不愿意投入自研OS,所以只能選擇相對(duì)成熟并且生態(tài)資源豐富的Linux。
Google不是幾年前就已經(jīng)開始開發(fā)Fuchsia了嗎? 咱們拭目以待吧。也希望國(guó)內(nèi)有實(shí)力的企業(yè)和科研機(jī)構(gòu)能夠迎頭趕上,早日實(shí)現(xiàn)自研OS夢(mèng)。
github上放出來(lái)的只是一個(gè)迷你的嵌入式OS內(nèi)核LiteOS,翻看過(guò)代碼,本身并沒有很大的難度。至于鴻蒙OS,源碼還沒開放,目前為止還只是在PPT上出現(xiàn)過(guò),所以不好評(píng)價(jià),但愿能夠不負(fù)眾望吧。
Hongmeng OS是基于Linux內(nèi)核源代碼的開發(fā)。 OS實(shí)現(xiàn)代碼主要是C語(yǔ)言,內(nèi)核提供的本機(jī)系統(tǒng)調(diào)用接口肯定也是C語(yǔ)言接口。上層APP應(yīng)用程序與現(xiàn)有的Android JAVA程序兼容,可能需要重新編譯JAVA應(yīng)用程序。程序代碼將運(yùn)行。至于應(yīng)用程序編程SDK不支持JAVA以外的編程語(yǔ)言,還需要等待系統(tǒng)正式發(fā)布后才能發(fā)布,但是你可以先了解下面的編譯器,據(jù)說(shuō)這是一個(gè)業(yè)界開源編譯器,用于編譯APP程序。 。但是,我仍然希望鴻蒙操作系統(tǒng)的應(yīng)用程序編程接口支持更多的編程語(yǔ)言(如CC等),這樣程序可以有更多的選擇。
操作系統(tǒng)從運(yùn)行效率 和 可控性來(lái)看是要用C語(yǔ)言。 解釋性語(yǔ)言,比如python、PHP就不大可能的。Java 也不太可能,一方面運(yùn)行效率不如C語(yǔ)言,另外不可控:在內(nèi)存方面,C語(yǔ)言內(nèi)存申請(qǐng)和釋放都很實(shí)時(shí),不像Java 語(yǔ)言內(nèi)存釋放 要等GC。在操作系統(tǒng)層面,內(nèi)存申請(qǐng)和釋放是很頻繁的,不能用GC定時(shí)釋放,萬(wàn)一來(lái)不及釋放 就OOM了,另外的萬(wàn)一發(fā)生full GC 那就更糟糕了,操作系統(tǒng)底層指令運(yùn)行稍微一抖動(dòng),應(yīng)用程序的執(zhí)行性能就震了三震。
希望對(duì)你有所幫助!
從技術(shù)上講,操作系統(tǒng)是一個(gè)沒有多少技術(shù)含量的事情。一個(gè)明白操作系統(tǒng)原理的人用幾個(gè)月就可以寫出一個(gè)操作系統(tǒng)。
這個(gè)世界上的操作系統(tǒng)成千上萬(wàn),到處都是,任何一個(gè)自動(dòng)設(shè)備中都可以認(rèn)為里面有一個(gè)操作系統(tǒng),電話、門禁、共享自行車中都有。
鴻蒙系統(tǒng)是否好寫要看他的目標(biāo)是什么,只是簡(jiǎn)單使用當(dāng)然簡(jiǎn)單,但要成為一個(gè)流行的系統(tǒng)則難度非常的高。
個(gè)人看法是鴻蒙系統(tǒng)有天生的缺陷,他是對(duì)抗美國(guó)產(chǎn)生的,華為一家獨(dú)大,包括國(guó)內(nèi)的其它廠商都不能干涉,同時(shí)他并非開源,他想怎么辦就怎么辦。這樣就造成開發(fā)者特別是國(guó)外的開發(fā)者面臨的風(fēng)險(xiǎn)非常的大。要是和誰(shuí)鬧翻了給禁用那怎么辦?
安卓有一個(gè)最大的優(yōu)勢(shì)在于開源,世界上的開發(fā)者都可以使用,共同推進(jìn)發(fā)展。當(dāng)然本次事件更多的來(lái)源于政府的制裁,作為google當(dāng)然要遵守政府的規(guī)定。但鴻蒙同時(shí)要遵守政府及企業(yè)的雙層管制。
因此鴻蒙更多的是國(guó)內(nèi)華為的系統(tǒng),無(wú)論是阿里、小米還是誰(shuí)想用都面臨具體的風(fēng)險(xiǎn),國(guó)外的開發(fā)者更是這樣,要是他的國(guó)家一不小心辱華了,華為就給他們禁用,他們就死定了。
操作系統(tǒng)沒有一個(gè)可以用好寫來(lái)形容。
首先從代碼量上來(lái)講,操作系統(tǒng)作為一個(gè)系統(tǒng),其代碼量工作是非常龐大的,如果由單個(gè)開發(fā)者來(lái)完成,會(huì)是一項(xiàng)非常艱巨的任務(wù)。比如Windows內(nèi)核的代碼在5000萬(wàn)行以上,Linux目前在2500萬(wàn)行左右。如果題主從事開發(fā)工作的話,可以大概估計(jì)一下代碼量的多少。
作為操作系統(tǒng)來(lái)說(shuō),兼容不同設(shè)備以及不同代的設(shè)備是必須的,向上和向下兼容保證了操作系統(tǒng)可以運(yùn)行在不同的平臺(tái)上,而向后兼容則保證了開發(fā)者的產(chǎn)品不會(huì)由于系統(tǒng)升級(jí)而出現(xiàn)不能使用的情況。
鴻蒙是分布式系統(tǒng),顯然需要支持不止一種類型的設(shè)備,這意味著操作系統(tǒng)本身需要考慮大量的底層硬件區(qū)別并給予支持。
操作系統(tǒng)最主要的一個(gè)功能是調(diào)度,即使在微內(nèi)核架構(gòu)里,調(diào)度依然被保留為內(nèi)核的功能之一。
而調(diào)度在不同的負(fù)載下面,不同的設(shè)備上面以及不同的使用場(chǎng)景下面,都應(yīng)該表現(xiàn)出不同的性能,那么開發(fā)者需要考慮到這其中最優(yōu)并且最穩(wěn)定的方案,最簡(jiǎn)單的方法不夠智能,最智能的方法又可能引入一些問題。
所以總體來(lái)講,不論操作系統(tǒng)本身性能優(yōu)劣,從頭開發(fā)一套系統(tǒng)就是一件工程量極其龐大的工作。
對(duì)于像華為這種公司來(lái)說(shuō),寫出一個(gè)基于Linux的類似于安卓的系統(tǒng)應(yīng)該是沒有什么難度。但為什么鴻蒙系統(tǒng)到現(xiàn)在還沒有正式退出使用?
其次一個(gè)系統(tǒng)主要是的就是它的生態(tài)系統(tǒng),就是我們使用的各種app,就像當(dāng)初微軟的手機(jī)系統(tǒng),就是死在軟件生態(tài)不全,而形成生態(tài)就需要比較長(zhǎng)時(shí)間和財(cái)力的投入,要吸引開發(fā)者去適配新的系統(tǒng),而華為目前正在做這件事,通過(guò)高于其他系統(tǒng)的收益分成或者收益全部讓利開發(fā)者的方式慢慢完善自己的生態(tài)。目前國(guó)內(nèi)外已經(jīng)有很多軟件及 游戲 廠商已經(jīng)開始適配HMS服務(wù)了,相信不久我們就能看到生態(tài)完善的華為新的系統(tǒng)了[贊]
聽到鴻蒙,華為都不知道是誰(shuí)家系統(tǒng),也許根本就不存在
湊合吧,筆畫有點(diǎn)多[捂臉]
難!
但對(duì)任何一家世界級(jí)體量的公司,都寫得出!連黑莓手機(jī)都能寫得出!
但生態(tài)很難!收費(fèi)沒人用,開源也沒人用[捂臉]
不好寫
有。經(jīng)使用華為手機(jī)得知。因鴻蒙系統(tǒng)可以讓此手機(jī)運(yùn)行起來(lái)更為流暢和使用起來(lái)更舒適,所以非常有必要開發(fā)。該手機(jī)無(wú)論是性能還是配置方面都是非常不錯(cuò)的。
眾所周知,對(duì)于一款操作系統(tǒng)而言,最重要的是生態(tài),如果生態(tài)不行,操作系統(tǒng)本身再好也難以持續(xù)下去。當(dāng)初微軟的windows Phone,還有三星的Tizen就是這樣敗北的。
所以在鴻蒙系統(tǒng)發(fā)布后,大家就一直期待鴻蒙系統(tǒng)的生態(tài)能夠迅速發(fā)展起來(lái),雖然鴻蒙是能夠兼容安卓APP的,但那是“借雞生蛋”,最終還是要自己“喂雞生蛋”才靠譜。
而據(jù)華為在8月初時(shí)的說(shuō)法, 鴻蒙生態(tài)開發(fā)者數(shù)量已突破120萬(wàn),超過(guò)300家應(yīng)用伙伴加入到鴻蒙生態(tài),共有65款設(shè)備已經(jīng)升級(jí)HarmonyOS 2正式版。
但是讓人驚訝的是,鴻蒙原生的APP數(shù)量才300多款,目前鴻蒙系統(tǒng)中使用的更多的還是安卓APP,于是有網(wǎng)友評(píng)價(jià)稱,120萬(wàn)開發(fā)者,開發(fā)出300多款A(yù)PP,真是開發(fā)了個(gè)寂寞。
像蘋果目前在中國(guó)有440多萬(wàn)注冊(cè)開發(fā)者,開發(fā)了iOS版的APP超過(guò)100萬(wàn)個(gè),而安卓在中國(guó)有500多萬(wàn)開發(fā)者,有200多萬(wàn)安卓版APP。
那么為何120多萬(wàn)開發(fā)者,就開發(fā)出300多個(gè)APP,平均3000多人才開發(fā)出一個(gè)APP來(lái)?
首先要說(shuō)一說(shuō)的是這120萬(wàn)開發(fā)者究竟是怎么算的,我們知道目前在華為的系統(tǒng)中,是沒有GMS的了,全是使用HMS,鴻蒙中是如此,EMUI中也是如此。
所以加入HMS的開發(fā)者,特別是加入鴻蒙系統(tǒng)中應(yīng)用商店 “AppGallery”的開發(fā)者, 理論上是可以稱之為鴻蒙生態(tài)的開發(fā)者的,而HMS已經(jīng)發(fā)展了好多年, “AppGallery” 里面已經(jīng)有上百萬(wàn)APP之多,所以有120萬(wàn)開發(fā)者很正常,這是統(tǒng)計(jì)口徑的不同,大家不要以為鴻蒙生態(tài)的開發(fā)者,就必須開發(fā)出鴻蒙原生APP出來(lái)。
其次,也正因?yàn)?鴻蒙系統(tǒng)兼容安卓系統(tǒng)應(yīng)用,所以開發(fā)者們是無(wú)需專門開發(fā)鴻蒙系統(tǒng)應(yīng)用,也能接入鴻蒙生態(tài),所以這120萬(wàn)的開發(fā)者,也不一定馬上就會(huì)行動(dòng),開發(fā)鴻蒙專版APP出來(lái),畢竟開發(fā)維護(hù)也是有成本的。
所以他們會(huì)觀望,會(huì)看看鴻蒙的發(fā)展情況,當(dāng) 用戶量上升,個(gè)性化功能增加,才會(huì)有未來(lái)越來(lái)越多的開發(fā)者針對(duì)性的開發(fā)鴻蒙版本應(yīng)用。
Ability
Ability是應(yīng)用所具備能力的抽象
2.onActive()
Page會(huì)在進(jìn)入INACTIVE狀態(tài)后來(lái)到前臺(tái),然后系統(tǒng)調(diào)用此回調(diào)。Page在此之后進(jìn)入ACTIVE狀態(tài),該狀態(tài)是應(yīng)用與用戶交互的狀態(tài)。Page將保持在此狀態(tài),除非某類事件發(fā)生導(dǎo)致Page失去焦點(diǎn),比如用戶點(diǎn)擊返回鍵或?qū)Ш降狡渌鸓age。當(dāng)此類事件發(fā)生時(shí),會(huì)觸發(fā)Page回到INACTIVE狀態(tài),系統(tǒng)將調(diào)用onInactive()回調(diào)。此后,Page可能重新回到ACTIVE狀態(tài),系統(tǒng)將再次調(diào)用onActive()回調(diào)。因此,開發(fā)者通常需要成對(duì)實(shí)現(xiàn)onActive()和onInactive(),并在onActive()中獲取在onInactive()中被釋放的資源。
3.onInactive()
當(dāng)Page失去焦點(diǎn)時(shí),系統(tǒng)將調(diào)用此回調(diào),此后Page進(jìn)入INACTIVE狀態(tài)。開發(fā)者可以在此回調(diào)中實(shí)現(xiàn)Page失去焦點(diǎn)時(shí)應(yīng)表現(xiàn)的恰當(dāng)行為。
4.onBackground()
如果Page不再對(duì)用戶可見,系統(tǒng)將調(diào)用此回調(diào)通知開發(fā)者用戶進(jìn)行相應(yīng)的資源釋放,此后Page進(jìn)入BACKGROUND狀態(tài)。開發(fā)者應(yīng)該在此回調(diào)中釋放Page不可見時(shí)無(wú)用的資源,或在此回調(diào)中執(zhí)行較為耗時(shí)的狀態(tài)保存操作。
5.onForeground()
處于BACKGROUND狀態(tài)的Page仍然駐留在內(nèi)存中,當(dāng)重新回到前臺(tái)時(shí)(比如用戶重新導(dǎo)航到此Page),系統(tǒng)將先調(diào)用onForeground()回調(diào)通知開發(fā)者,而后Page的生命周期狀態(tài)回到INACTIVE狀態(tài)。開發(fā)者應(yīng)當(dāng)在此回調(diào)中重新申請(qǐng)?jiān)趏nBackground()中釋放的資源,最后Page的生命周期狀態(tài)進(jìn)一步回到ACTIVE狀態(tài),系統(tǒng)將通過(guò)onActive()回調(diào)通知開發(fā)者用戶。
6.onStop()
系統(tǒng)將要銷毀Page時(shí),將會(huì)觸發(fā)此回調(diào)函數(shù),通知用戶進(jìn)行系統(tǒng)資源的釋放。銷毀Page的可能原因包括以下幾個(gè)方面:
用戶通過(guò)系統(tǒng)管理能力關(guān)閉指定Page,例如使用任務(wù)管理器關(guān)閉Page。
用戶行為觸發(fā)Page的terminateAbility()方法調(diào)用,例如使用應(yīng)用的退出功能。
配置變更導(dǎo)致系統(tǒng)暫時(shí)銷毀Page并重建。
系統(tǒng)出于資源管理目的,自動(dòng)觸發(fā)對(duì)處于BACKGROUND狀態(tài)Page的銷毀。
AbilitySlice生命周期
AbilitySlice生命周期回調(diào)與Page的相應(yīng)回調(diào)類似,因此不再贅述。由于AbilitySlice承載具體的頁(yè)面,開發(fā)者必須重寫AbilitySlice的onStart()回調(diào),并在此方法中通過(guò)setUIContent()方法設(shè)置頁(yè)面。
Page與AbilitySlice生命周期關(guān)聯(lián)
當(dāng)AbilitySlice處于前臺(tái)且具有焦點(diǎn)時(shí),其生命周期狀態(tài)隨著所屬Page的生命周期狀態(tài)的變化而變化。當(dāng)一個(gè)Page擁有多個(gè)AbilitySlice時(shí),例如:MyAbility下有FooAbilitySlice和BarAbilitySlice,當(dāng)前FooAbilitySlice處于前臺(tái)并獲得焦點(diǎn),并即將導(dǎo)航到BarAbilitySlice,在此期間的生命周期狀態(tài)變化順序?yàn)椋?/p>
對(duì)應(yīng)兩個(gè)slice的生命周期方法回調(diào)順序?yàn)椋?/p>
FooAbilitySlice.onInactive() -- BarAbilitySlice.onStart() -- BarAbilitySlice.onActive() -- FooAbilitySlice.onBackground()
在整個(gè)流程中,MyAbility始終處于ACTIVE狀態(tài)。但是,當(dāng)Page被系統(tǒng)銷毀時(shí),其所有已實(shí)例化的AbilitySlice將聯(lián)動(dòng)銷毀,而不僅是處于前臺(tái)的AbilitySlice。