本發(fā)明涉及安卓技術(shù)領(lǐng)域,具體涉及安卓服務(wù)生命周期管理方法、服務(wù)管理對象及安卓系統(tǒng)。
背景技術(shù):
在現(xiàn)在社會中我們最離不開的一種的東西就是服務(wù),生活中我們需要服務(wù),各式各樣的服務(wù),隨時隨地,不間斷的優(yōu)質(zhì)服務(wù)。這推動著我們智能體統(tǒng)的發(fā)展,安卓智能體統(tǒng)中提供了有四大組件,其中service(服務(wù))組件更是重中之重,這樣的服務(wù)常常默默運(yùn)行在后臺,不被用戶所感知。
但這類服務(wù)的運(yùn)行環(huán)境是相當(dāng)不友好的,由于安卓系統(tǒng)本身的機(jī)制導(dǎo)致這類的服務(wù)常常被莫名其妙的殺死,殺死服務(wù)的可能是安卓系統(tǒng)本身,也有可能是第三方的其他程序。大家都希望自己的服務(wù)存活著來完成自己的業(yè)務(wù),為我們用戶或者整個系統(tǒng)去提供自己力所能及的幫助,但是無奈安卓系統(tǒng)本身并沒有提供這樣的保護(hù)機(jī)制,所以開發(fā)者開始自己去想辦法,開始利用安卓系統(tǒng)的消息管理機(jī)制,通過接收系統(tǒng)消息,或者寫計(jì)劃任務(wù),wifi信號變化,插拔usb線,網(wǎng)絡(luò)信號變化,鎖屏與解鎖等等來不停的啟動自己的服務(wù),與此相對應(yīng)的就是一些專門結(jié)束這類服務(wù)的管理軟件。一個不停地啟動,一個不停地結(jié)束,這是一個死循環(huán),一個惡心的死循環(huán)。整個系統(tǒng)的資源就這樣被不停的消耗直至死亡。
技術(shù)實(shí)現(xiàn)要素:
(一)要解決的技術(shù)問題
針對現(xiàn)有技術(shù)中服務(wù)不停地啟動和結(jié)束,浪費(fèi)系統(tǒng)資源的缺陷,本發(fā)明提供安卓服務(wù)生命周期管理方法、服務(wù)管理對象及安卓系統(tǒng)。
(二)技術(shù)方案
本發(fā)明公開一種安卓系統(tǒng)服務(wù)生命周期管理方法,其包括:
啟動安卓系統(tǒng)的核心服務(wù)的服務(wù)管理對象;
所述服務(wù)管理對象獲取服務(wù)映射文件中可調(diào)用服務(wù)的服務(wù)列表,并根據(jù)所述服務(wù)列表準(zhǔn)備可正常調(diào)用的服務(wù);
所述服務(wù)管理對象接收調(diào)用服務(wù)需求;
所述服務(wù)管理對象根據(jù)所述調(diào)用服務(wù)需求和所述服務(wù)映射文件,返回服務(wù)調(diào)用指令,供調(diào)用已準(zhǔn)備的服務(wù)。
在一些實(shí)施例中,優(yōu)選為,在所述啟動安卓系統(tǒng)的核心服務(wù)的服務(wù)管理對象之前,所述安卓系統(tǒng)服務(wù)生命周期管理方法包括:創(chuàng)建服務(wù)管理對象。
在一些實(shí)施例中,優(yōu)選為,在所述啟動安卓系統(tǒng)的核心服務(wù)的服務(wù)管理對象之前,所述安卓系統(tǒng)服務(wù)生命周期管理方法包括:創(chuàng)建服務(wù)映射文件。
在一些實(shí)施例中,優(yōu)選為,所述服務(wù)映射文件包括:服務(wù)的名稱、所屬位置、啟動方式、key。
在一些實(shí)施例中,優(yōu)選為,所述服務(wù)列表的獲取方式包括:所述服務(wù)管理對象從安卓系統(tǒng)數(shù)據(jù)庫存儲的所述服務(wù)映射文件中獲取所述服務(wù)列表。
在一些實(shí)施例中,優(yōu)選為,所述服務(wù)映射文件在所述安卓系統(tǒng)數(shù)據(jù)庫中存儲的方式包括:
所述服務(wù)管理對象首次啟動時,所述服務(wù)管理對象將所述服務(wù)映射文件寫入所述安卓系統(tǒng)數(shù)據(jù)庫;
所述服務(wù)管理對象非首次啟動時,若所述服務(wù)管理對象中的所述服務(wù)映射文件發(fā)生更新,則所述服務(wù)管理對象將更新的服務(wù)映射文件替換所述安卓系統(tǒng)數(shù)據(jù)庫中存儲的服務(wù)映射文件。
在一些實(shí)施例中,優(yōu)選為,所述服務(wù)管理對象從安卓系統(tǒng)數(shù)據(jù)庫存儲的所述服務(wù)映射文件中獲取所述服務(wù)列表包括:
所述服務(wù)管理對象建立獲取服務(wù)列表的指令;
所述服務(wù)管理對象根據(jù)所述指令檢查其包含的服務(wù)映射文件是否發(fā)生更新;
如果發(fā)生更新,所述服務(wù)管理對象將更新的服務(wù)映射文件替換所述安卓系統(tǒng)數(shù)據(jù)庫中存儲的服務(wù)映射文件;所述服務(wù)管理對象從所述安卓系統(tǒng)數(shù)據(jù)庫存儲的最新的服務(wù)映射文件中獲取服務(wù)列表;
如果未發(fā)生更新,所述服務(wù)管理對象從所述安卓系統(tǒng)數(shù)據(jù)庫存儲的服務(wù)映射文件中獲取服務(wù)列表。
在一些實(shí)施例中,優(yōu)選為,根據(jù)所述服務(wù)列表準(zhǔn)備可正常調(diào)用的服務(wù)包括:
所述服務(wù)管理對象啟動所述服務(wù)列表中的服務(wù),并嘗試綁定該服務(wù);
若綁定成功,則將該服務(wù)列為可正常調(diào)用的服務(wù);
若綁定失敗,則重試;若重試成功,則將所述服務(wù)列為可正常調(diào)用的服務(wù);若重試次數(shù)達(dá)到上限,則將所述服務(wù)列為永久失敗;
所述服務(wù)管理對象對所述可正常調(diào)用的服務(wù)的接口進(jìn)行封裝管理。
在一些實(shí)施例中,優(yōu)選為,所述服務(wù)管理對象對所述可正常調(diào)用的服務(wù)的接口進(jìn)行封裝管理包括:
所述服務(wù)管理對象通過哈希表為每一個所述可正常調(diào)用的服務(wù)建立位置對應(yīng),還通過死亡報(bào)告為每一個所述可正常調(diào)用的服務(wù)建立生命跟蹤;所述哈希表包括:key和value的鍵值對;
所述死亡報(bào)告中出現(xiàn)死亡結(jié)果時,所述服務(wù)管理對象將死亡結(jié)構(gòu)對應(yīng)的服務(wù)重新準(zhǔn)備為可正常調(diào)用的服務(wù)。
在一些實(shí)施例中,優(yōu)選為,所述服務(wù)管理對象根據(jù)所述調(diào)用服務(wù)需求和所述服務(wù)映射文件,向第三方程序返回服務(wù)調(diào)用指令包括:
所述服務(wù)管理對象根據(jù)所述調(diào)用服務(wù)需求確定待調(diào)用服務(wù)的key;
所述服務(wù)管理對象根據(jù)所述待調(diào)用服務(wù)的key,在所述哈希表和所述服務(wù)映射文件中找到相應(yīng)的服務(wù)及服務(wù)調(diào)用指令,向第三方程序返回所述服務(wù)調(diào)用指令。
本發(fā)明還提供了一種所述安卓系統(tǒng)服務(wù)生命周期管理方法中的服務(wù)管理對象,其包括:服務(wù)啟動模塊、服務(wù)管理模塊和包含可調(diào)用服務(wù)的服務(wù)映射文件;其中,
所述服務(wù)啟動模塊,用于在服務(wù)管理對象啟動后獲取所述服務(wù)映射文件的服務(wù)列表,并根據(jù)所述服務(wù)列表準(zhǔn)備可正常調(diào)用的服務(wù);
所述服務(wù)管理模塊,用于接收第三方程序的調(diào)用服務(wù)需求;并根據(jù)所述調(diào)用服務(wù)需求和所述服務(wù)映射文件,向第三方程序返回服務(wù)調(diào)用指令,供所述第三方程序調(diào)用已準(zhǔn)備的服務(wù)。
在一些實(shí)施例中,優(yōu)選為,所述服務(wù)啟動模塊包括:寫入單元和檢查單元;
所述寫入單元,用于服務(wù)管理對象首次啟動時,將所述服務(wù)映射文件寫入所述安卓系統(tǒng)數(shù)據(jù)庫;在服務(wù)映射文件發(fā)生更新,將更新的服務(wù)映射文件替換所述安卓系統(tǒng)數(shù)據(jù)庫中存儲的服務(wù)映射文件;
所述檢查單元,用于檢查服務(wù)管理對象中的所述服務(wù)映射文件發(fā)生更新,并將檢查結(jié)果反饋所述寫入單元。
在一些實(shí)施例中,優(yōu)選為,所述服務(wù)啟動模塊還包括:獲取單元;
所述獲取單元,用于生成獲取服務(wù)列表的指令,并向所述檢查單元發(fā)送檢查指令,且待所述檢查單元和所述寫入單元工作后,從安卓系統(tǒng)數(shù)據(jù)庫中存儲的服務(wù)映射文件中獲取服務(wù)映射文件;
所述檢查單元,根據(jù)所述檢查指令,檢查服務(wù)管理對象中的所述服務(wù)映射文件發(fā)生更新,并將檢查結(jié)果反饋所述寫入單元。
在一些實(shí)施例中,優(yōu)選為,所述服務(wù)啟動模塊還包括:準(zhǔn)備單元;
所述準(zhǔn)備單元,用于服務(wù)管理對象啟動所述服務(wù)列表中的服務(wù),并嘗試綁定該服務(wù);若綁定成功,則將該服務(wù)列為可正常調(diào)用的服務(wù);若綁定失敗,則重試;若重試成功,則將所述服務(wù)列為可正常調(diào)用的服務(wù);若重試次數(shù)達(dá)到上限,則將所述服務(wù)列為永久失敗。
在一些實(shí)施例中,優(yōu)選為,所述服務(wù)管理模塊包括:第一注冊單元、第二注冊單元、通訊單元;
所述第一注冊單元,用于為每一個所述可正常調(diào)用的服務(wù)建立位置對應(yīng)的哈希表;
所述第二注冊單元,用于為每一個所述可正常調(diào)用的服務(wù)建立生命跟蹤的死亡報(bào)告,當(dāng)所述死亡報(bào)告中出現(xiàn)死亡結(jié)果時,向所述服務(wù)啟動模塊發(fā)送將死亡結(jié)構(gòu)對應(yīng)的服務(wù)重新準(zhǔn)備為可正常調(diào)用的服務(wù);
所述通訊單元,用于根據(jù)所述調(diào)用服務(wù)需求確定待調(diào)用服務(wù)的key;根據(jù)所述待調(diào)用服務(wù)的key,在所述哈希表和所述服務(wù)映射文件中找到相應(yīng)的服務(wù)及服務(wù)調(diào)用指令,向第三方程序返回所述服務(wù)調(diào)用指令。
本發(fā)明還提供了一種安卓系統(tǒng),其包括:所述的服務(wù)管理對象。
(三)有益效果
本發(fā)明公開安卓服務(wù)生命周期管理方法、服務(wù)管理對象及安卓系統(tǒng),安卓系統(tǒng)的核心服務(wù)對服務(wù)管理對象進(jìn)行服務(wù),確保該服務(wù)管理對象處于核心運(yùn)行狀態(tài);而服務(wù)管理對象對可調(diào)用服務(wù)進(jìn)行整體管理服務(wù),服務(wù)管理對象啟動后對可調(diào)用服務(wù)進(jìn)行檢測,確定這些服務(wù)為可正常調(diào)用的服務(wù),當(dāng)外部需要調(diào)用該服務(wù)時,服務(wù)管理對象返回服務(wù)調(diào)用指令,供調(diào)用服務(wù)。通過該服務(wù)管理對象對服務(wù)進(jìn)行統(tǒng)一管理服務(wù),服務(wù)本身無需浪費(fèi)資源想方設(shè)法進(jìn)行存活,服務(wù)在需要的時候直接被調(diào)取即可,這種方式能夠解決安卓系統(tǒng)內(nèi)的大量資源,避免各服務(wù)在不需要時運(yùn)行而浪費(fèi)資源,于整個系統(tǒng)而言,不存在肆意亂啟動,總是再真的需要時才申請資源。
另一方面,雖然安卓系統(tǒng)核心服務(wù)層無法進(jìn)行更新,但是服務(wù)管理對象又獨(dú)立于安卓系統(tǒng)的核心服務(wù)層,所以服務(wù)管理對象可自由進(jìn)行版本迭代,也適用于其管理服務(wù)的各服務(wù)進(jìn)行版本迭代。讓系統(tǒng)服務(wù)啟動者、系統(tǒng)服務(wù)管理者和服務(wù)映射文件都能正常完成版本迭代。
附圖說明
圖1為本發(fā)明一實(shí)施例中安卓服務(wù)生命周期管理方法的流程圖;
圖2為本發(fā)明另一實(shí)施例中安卓服務(wù)生命周期管理方法的流程圖;
圖3為本發(fā)明基于服務(wù)列表獲取動作的數(shù)據(jù)庫中服務(wù)映射文件的檢查和服務(wù)列表獲取的流程圖;
圖4為本發(fā)明一個實(shí)施例中服務(wù)管理對象的結(jié)構(gòu)圖;
圖5為本發(fā)明一個實(shí)施例中安卓系統(tǒng)的結(jié)構(gòu)圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
考慮到現(xiàn)有安卓系統(tǒng)中各種服務(wù)存在不斷被停殺,又不斷自啟動的循環(huán)中,即便服務(wù)不處于使用狀態(tài),該循環(huán)也在不停進(jìn)行,導(dǎo)致安卓系統(tǒng)中大量的資源被占用,嚴(yán)重影響安卓系統(tǒng)的使用。為此,本技術(shù)對服務(wù)生命周期進(jìn)行管理。
圖1示出安卓系統(tǒng)服務(wù)生命周期管理方法的步驟,其包括:
步驟01,啟動安卓系統(tǒng)的核心服務(wù)的服務(wù)管理對象;
步驟02,服務(wù)管理對象獲取服務(wù)映射文件中可調(diào)用服務(wù)的服務(wù)列表,并根據(jù)服務(wù)列表準(zhǔn)備可正常調(diào)用的服務(wù);
步驟03,服務(wù)管理對象接收調(diào)用服務(wù)需求;
步驟04,服務(wù)管理對象根據(jù)調(diào)用服務(wù)需求和服務(wù)映射文件,返回服務(wù)調(diào)用指令,供調(diào)用已準(zhǔn)備的服務(wù)。
安卓系統(tǒng)的核心服務(wù)對服務(wù)管理對象進(jìn)行服務(wù),確保該服務(wù)管理對象處于核心運(yùn)行狀態(tài);而服務(wù)管理對象對可調(diào)用服務(wù)進(jìn)行整體管理服務(wù),服務(wù)管理對象啟動后對可調(diào)用服務(wù)進(jìn)行檢測,確定這些服務(wù)為可正常調(diào)用的服務(wù),當(dāng)外部需要調(diào)用該服務(wù)時,服務(wù)管理對象返回服務(wù)調(diào)用指令,供調(diào)用服務(wù)。通過該服務(wù)管理對象對服務(wù)進(jìn)行統(tǒng)一管理服務(wù),服務(wù)本身無需浪費(fèi)資源想方設(shè)法進(jìn)行存活,服務(wù)在需要的時候直接被調(diào)取即可,這種方式能夠解決安卓系統(tǒng)內(nèi)的大量資源,避免各服務(wù)在不需要時運(yùn)行而浪費(fèi)資源,于整個系統(tǒng)而言,不存在肆意亂啟動,總是再真的需要時才申請資源。
接下來對該技術(shù)進(jìn)行詳細(xì)說明:
一種安卓系統(tǒng)服務(wù)生命周期管理方法,如圖2和3所示,其包括:
步驟10,創(chuàng)建服務(wù)映射文件;
服務(wù)映射文件為安卓系統(tǒng)服務(wù)生命周期管理方法中較為關(guān)鍵的技術(shù),其記載了服務(wù)的各類信息,比如:服務(wù)的名稱、所屬位置、啟動方式、綁定方式、key等。為了對安卓系統(tǒng)中的服務(wù)進(jìn)行全方位管理,建議服務(wù)映射文件中的服務(wù)是多種多樣的,盡可能涵蓋安卓系統(tǒng)中的所有服務(wù)?;诖耍绻沧肯到y(tǒng)中服務(wù)做了改變(增加或減小或更新),則服務(wù)映射文件也對應(yīng)性修改。
還需要說明的是,服務(wù)映射文件中每一個元素都具備重要作用,比如:服務(wù)所屬位置是找到相應(yīng)服務(wù)的關(guān)鍵,服務(wù)的啟動方式、綁定方式是服務(wù)調(diào)用中較為關(guān)鍵的技術(shù),key方便服務(wù)的快速找尋。
步驟11,在安卓系統(tǒng)的核心服務(wù)層創(chuàng)建服務(wù)管理對象;
該步驟中是將服務(wù)管理對象在安卓系統(tǒng)的核心服務(wù)層進(jìn)行核心服務(wù)設(shè)置。本步驟的前提在于研發(fā)服務(wù)管理對象,該服務(wù)管理對象(又稱servicecore),其為本發(fā)明設(shè)計(jì)的核心技術(shù),在后文的方法描述中,將逐步對其進(jìn)行說明,本領(lǐng)域技術(shù)人員可以接下來的描述對服務(wù)管理對象的功能和設(shè)計(jì)進(jìn)行清晰的了解。
步驟10和11是安卓系統(tǒng)的初始化過程,一旦設(shè)置完畢,后續(xù)跳過步驟10和11,直接執(zhí)行步驟12-步驟20。
步驟12,啟動安卓系統(tǒng)的核心服務(wù)的服務(wù)管理對象;
安卓系統(tǒng)啟動后,安卓系統(tǒng)的核心服務(wù)包括服務(wù)管理對象,服務(wù)管理對象隨安卓系統(tǒng)啟動。
步驟14,服務(wù)管理對象獲取服務(wù)映射文件中可調(diào)用服務(wù)的服務(wù)列表;
由于服務(wù)映射文件相當(dāng)于對安卓系統(tǒng)內(nèi)服務(wù)的登記,為了對安卓系統(tǒng)中的服務(wù)進(jìn)行管理,需要利用該服務(wù)映射文件,比如利用服務(wù)列表獲取服務(wù)的名稱等信息。
需要說明的是,雖然上文提到服務(wù)管理對象中包含服務(wù)映射文件,但是,服務(wù)管理對象在獲取服務(wù)映射文件中的服務(wù)列表時,獲取的方式可以有多種方式,這些方式也基于服務(wù)映射文件的存放位置。下面舉例說明:
例1,服務(wù)映射文件存儲在安卓系統(tǒng)的數(shù)據(jù)庫中,服務(wù)管理對象從數(shù)據(jù)庫獲取該服務(wù)映射文件。
該方式利用了安卓系統(tǒng)數(shù)據(jù)庫的穩(wěn)定性和方便讀取、方便維護(hù)的特性。
該方法基于服務(wù)映射文件提前上傳到安卓系統(tǒng)的數(shù)據(jù)庫中。情況1,在服務(wù)管理對象加載到安卓系統(tǒng)中首次啟動時即可以寫入數(shù)據(jù)庫中。情況2,隨著服務(wù)的改變,服務(wù)映射文件會做一定個更新,這種情況下,服務(wù)管理對象可以再次將更新的服務(wù)映射文件寫入數(shù)據(jù)庫中替換原來的服務(wù)映射文件。
需要強(qiáng)調(diào)的是,由于服務(wù)管理對象需要從數(shù)據(jù)庫讀取服務(wù)映射文件,而且該服務(wù)映射文件必須是最新的,否則,影響后續(xù)操作,因此,建議在情況2中,讀取前對數(shù)據(jù)庫中的服務(wù)映射文件是否為最新的進(jìn)行檢查;或者,在服務(wù)映射文件更新后第一時間對數(shù)據(jù)庫的服務(wù)映射文件進(jìn)行替換,以免去后期檢查的步驟。至于如何做檢查,接下來給出一種實(shí)例對基于服務(wù)列表獲取動作的數(shù)據(jù)庫中服務(wù)映射文件的檢查和服務(wù)列表獲取進(jìn)行具體的說明。
步驟141,服務(wù)管理對象建立獲取服務(wù)列表的指令;
步驟143,服務(wù)管理對象根據(jù)指令檢查其包含的服務(wù)映射文件是否發(fā)生更新;
步驟145-1,如果結(jié)果為“y”,即發(fā)生更新,服務(wù)管理對象將更新的服務(wù)映射文件替換安卓系統(tǒng)數(shù)據(jù)庫中存儲的服務(wù)映射文件;服務(wù)管理對象從安卓系統(tǒng)數(shù)據(jù)庫存儲的最新的服務(wù)映射文件中獲取服務(wù)列表;
步驟145-2,如果結(jié)果為“n”,即未發(fā)生更新,服務(wù)管理對象從安卓系統(tǒng)數(shù)據(jù)庫存儲的服務(wù)映射文件中獲取服務(wù)列表。
例2,服務(wù)映射文件存放在服務(wù)管理對象的某個位置,服務(wù)管理對象內(nèi)部調(diào)取。這種方式容易增加服務(wù)管理對象的運(yùn)載,造成運(yùn)載的不穩(wěn)定性。
例3,服務(wù)映射文件存放在安卓系統(tǒng)的某個位置,該位置非數(shù)據(jù)庫。這種方式依賴于該位置的穩(wěn)定性,容易影響安卓系統(tǒng)的運(yùn)載穩(wěn)定性。
需要說明的是,本技術(shù)中優(yōu)選將服務(wù)映射文件吸入數(shù)據(jù)庫,通過訪問數(shù)據(jù)庫獲取服務(wù)映射文件的服務(wù)列表。當(dāng)然,本領(lǐng)域技術(shù)人員也可根據(jù)編程技術(shù)的進(jìn)步,安卓系統(tǒng)的優(yōu)化選擇其他存放方式。
步驟16,服務(wù)管理對象根據(jù)服務(wù)列表準(zhǔn)備可正常調(diào)用的服務(wù);
可以理解,可正常調(diào)用的服務(wù)即為在被啟動并運(yùn)行時,該服務(wù)能夠被啟動,且運(yùn)行穩(wěn)定。
本步驟也是技術(shù)的關(guān)鍵,基于服務(wù)列表,準(zhǔn)備可正常調(diào)用服務(wù)的方式:
a.服務(wù)管理對象啟動服務(wù)列表中的服務(wù),并嘗試綁定該服務(wù);
b1.若綁定成功,則將該服務(wù)列為可正常調(diào)用的服務(wù);
b2.若綁定失敗,則重試;若重試成功,則將服務(wù)列為可正常調(diào)用的服務(wù);若重試次數(shù)達(dá)到上限,則將服務(wù)列為永久失敗。
綁定失敗的原因舉例:1.目標(biāo)服務(wù)沒有安裝到系統(tǒng)中;2.在smf中的服務(wù)描述信息有誤;3.目標(biāo)服務(wù)的自身異常導(dǎo)致服務(wù)正確啟動。不過不局限于此三種,原因很多。
對于永久失敗的服務(wù)可通過達(dá)到一些特殊的條件以后才會被重新激活,比如典型的一個條件:程序的卸載安裝和更新。
服務(wù)管理對象對各服務(wù)進(jìn)行檢測,確保各服務(wù)都處于良好的可正常運(yùn)行狀態(tài),一旦這些服務(wù)需要被調(diào)用時,能正常運(yùn)行。在非調(diào)用狀態(tài),服務(wù)處于良好狀態(tài),而不運(yùn)行。這樣,各服務(wù)無需擔(dān)心被調(diào)用時出現(xiàn)錯誤,也無需擔(dān)心被系統(tǒng)停殺。因?yàn)榉?wù)管理對象在安卓系統(tǒng)的核心服務(wù)層運(yùn)行,服務(wù)管理對象處于安卓系統(tǒng)努力維護(hù)的服務(wù),所以,服務(wù)管理對象能夠正常運(yùn)行,對各服務(wù)進(jìn)行管理,使各服務(wù)的啟用處于安全、穩(wěn)定的環(huán)境中。
另一方面,該步驟也面臨著某些服務(wù)為不可正常調(diào)用的服務(wù),不可成長調(diào)用的服務(wù)需要其他方式進(jìn)行重新激活。
步驟18,服務(wù)管理對象對可正常調(diào)用的服務(wù)進(jìn)行管理;
該步驟是為了便于可正常調(diào)用的服務(wù)進(jìn)行快速、穩(wěn)定的使用。具體為:
a.服務(wù)管理對象通過哈希表為每一個可正常調(diào)用的服務(wù)建立位置對應(yīng);哈希表包括:key和value的鍵值對;
b.通過死亡報(bào)告為每一個可正常調(diào)用的服務(wù)建立生命跟蹤;
死亡報(bào)告中出現(xiàn)死亡結(jié)果時,服務(wù)管理對象將死亡結(jié)構(gòu)對應(yīng)的服務(wù)重新準(zhǔn)備為可正常調(diào)用的服務(wù)。
該步驟可以采用將可正常調(diào)用的服務(wù)的接口進(jìn)行封裝,調(diào)用時通過該接口調(diào)用服務(wù)。
步驟20,服務(wù)管理對象接收第三方程序的調(diào)用服務(wù)需求;并根據(jù)調(diào)用服務(wù)需求和服務(wù)映射文件,向第三方程序返回服務(wù)調(diào)用指令,供第三方程序調(diào)用已準(zhǔn)備的服務(wù)。
該步驟是與第三方進(jìn)行通訊,接收第三方的調(diào)用服務(wù)需求,向第三方反饋調(diào)用指令的步驟,通過該步驟,第三方能夠快速調(diào)用服務(wù)。具體方式:
(1)服務(wù)管理對象接收第三方程序的調(diào)用服務(wù)需求;
(2)服務(wù)管理對象根據(jù)調(diào)用服務(wù)需求確定待調(diào)用服務(wù)的key;
調(diào)用服務(wù)需求中會包含服務(wù)的相關(guān)信息,服務(wù)管理對象可根據(jù)該相關(guān)信息提取服務(wù)對應(yīng)的key。
(3)服務(wù)管理對象根據(jù)待調(diào)用服務(wù)的key,在哈希表和服務(wù)映射文件中找到相應(yīng)的服務(wù)及服務(wù)調(diào)用指令,向第三方程序返回服務(wù)調(diào)用指令。
至此,安卓系統(tǒng)中的服務(wù)被安全、穩(wěn)定的管理,且不會出現(xiàn)肆意開啟的情況,而且能夠快速響應(yīng)第三方程序的調(diào)取。整個安卓系統(tǒng)的資源得到有效利用,避免浪費(fèi)和無意義消耗。
接下來,提供一種安卓系統(tǒng)服務(wù)生命周期管理方法中的服務(wù)管理對象(servicecore),如圖4所示,其包括:
服務(wù)啟動模塊(servicestarter)、服務(wù)管理模塊(servicemanger)和包含可調(diào)用服務(wù)的服務(wù)映射文件(service映射文件);其中,
服務(wù)啟動模塊,用于在服務(wù)管理對象啟動后獲取服務(wù)映射文件的服務(wù)列表,并根據(jù)服務(wù)列表準(zhǔn)備可正常調(diào)用的服務(wù);
服務(wù)管理模塊,用于接收第三方程序的調(diào)用服務(wù)需求;并根據(jù)調(diào)用服務(wù)需求和服務(wù)映射文件,向第三方程序返回服務(wù)調(diào)用指令,供第三方程序調(diào)用已準(zhǔn)備的服務(wù)。
需要說明的是,服務(wù)啟動模塊(servicestarter)、服務(wù)管理模塊(servicemanger)可以為一個程序,可以為一段代碼。
為了方便服務(wù)啟動模塊將服務(wù)映射文件寫入數(shù)據(jù)庫,服務(wù)啟動模塊包括寫入單元和檢查單元;以實(shí)現(xiàn)首次啟動和非首次啟動時的寫入操作。
寫入單元,用于服務(wù)管理對象首次啟動時,將服務(wù)映射文件寫入安卓系統(tǒng)數(shù)據(jù)庫;在服務(wù)映射文件發(fā)生更新,將更新的服務(wù)映射文件替換安卓系統(tǒng)數(shù)據(jù)庫中存儲的服務(wù)映射文件;
檢查單元,用于檢查服務(wù)管理對象中的服務(wù)映射文件發(fā)生更新,并將檢查結(jié)果反饋寫入單元。
即服務(wù)管理對象首次啟動時,直接寫入;非首次啟動時,先通過檢查單元進(jìn)行檢查,如果服務(wù)映射文件發(fā)生更新,則再次寫入數(shù)據(jù)庫。而檢查單元的檢查工作的啟動方式可以有多種,比如:實(shí)時檢查服務(wù)映射文件的更新狀況;又比如:在需要從數(shù)據(jù)庫讀取服務(wù)映射文件時,啟動檢查單元的檢查操作。
考慮到服務(wù)啟動模塊需要獲取服務(wù)列表,因此,服務(wù)啟動模塊還包括:獲取單元;
獲取單元,用于生成獲取服務(wù)列表的指令,并向檢查單元發(fā)送檢查指令,且待檢查單元和寫入單元工作后,從安卓系統(tǒng)數(shù)據(jù)庫中存儲的服務(wù)映射文件中獲取服務(wù)映射文件;
檢查單元,根據(jù)檢查指令,檢查服務(wù)管理對象中的服務(wù)映射文件發(fā)生更新,并將檢查結(jié)果反饋寫入單元。
考慮到服務(wù)啟動模塊需要對安卓系統(tǒng)中的服務(wù)進(jìn)行初始化,通過初始化準(zhǔn)備好各服務(wù),處于可正常調(diào)用的服務(wù)。所以,服務(wù)啟動模塊還包括:準(zhǔn)備單元;
準(zhǔn)備單元,用于服務(wù)管理對象啟動服務(wù)列表中的服務(wù),并嘗試綁定該服務(wù);若綁定成功,則將該服務(wù)列為可正常調(diào)用的服務(wù);若綁定失敗,則重試;若重試成功,則將服務(wù)列為可正常調(diào)用的服務(wù);若重試次數(shù)達(dá)到上限,則將服務(wù)列為永久失敗。
服務(wù)管理模塊對準(zhǔn)備好的服務(wù)進(jìn)行管理,所以服務(wù)管理模塊包括:第一注冊單元、第二注冊單元、通訊單元;
第一注冊單元,用于為每一個可正常調(diào)用的服務(wù)建立位置對應(yīng)的哈希表;
第二注冊單元,用于為每一個可正常調(diào)用的服務(wù)建立生命跟蹤的死亡報(bào)告,當(dāng)死亡報(bào)告中出現(xiàn)死亡結(jié)果時,向服務(wù)啟動模塊發(fā)送將死亡結(jié)構(gòu)對應(yīng)的服務(wù)重新準(zhǔn)備為可正常調(diào)用的服務(wù);
通訊單元,用于根據(jù)調(diào)用服務(wù)需求確定待調(diào)用服務(wù)的key;根據(jù)待調(diào)用服務(wù)的key,在哈希表和服務(wù)映射文件中找到相應(yīng)的服務(wù)及服務(wù)調(diào)用指令,向第三方程序返回服務(wù)調(diào)用指令。
本發(fā)明還提供了一種安卓系統(tǒng),如圖5所示,其包括的服務(wù)管理對象、多個服務(wù)及核心服務(wù)層,三者相互連接。
接下來,基于音樂播放進(jìn)行示例:
假設(shè)第三方程序?qū)C(jī)器人說“播放音樂”,隨后能夠開始播放音樂。服務(wù)調(diào)用需要中的服務(wù)包括:錄音服務(wù)、媒體播放服務(wù)、系統(tǒng)的tts播放服務(wù)。
步驟0:在安卓系統(tǒng)中創(chuàng)建一個boot程序,將其服務(wù)管理對象android:persistent="true"放入系統(tǒng)目錄中,修改為系核心程序,android總是會盡全力去保護(hù)這個程序,所以這個程序已經(jīng)不需要我們?nèi)ケWo(hù),這個程序只有一個任務(wù)就是保護(hù)好servicecore,維護(hù)后續(xù)步驟正常運(yùn)行。而servicecore則輔助管理服務(wù)。這樣的依賴保護(hù)讓整個系統(tǒng)和結(jié)構(gòu)都變得健壯。系統(tǒng)消耗降低,不會肆意的釋放資源,不釋放資源就不會服務(wù)無端被殺死,自然就不會肆意重啟浪費(fèi)資源,形成了一個良性的循環(huán)。
步驟1:編寫服務(wù)映射文件,在service映射文件中寫明需要維護(hù)的服務(wù)有:錄音服務(wù)、媒體播放、tts語音合成服務(wù)。假定key分別為:voice,media,tts。
步驟2:服務(wù)列表獲取,服務(wù)管理對象隨安卓系統(tǒng)啟動后,servicestarter向服務(wù)管理對象全局配置globalconfig獲取一份需要啟動的服務(wù)列表。而且globalconfig內(nèi)容來源于服務(wù)映射文件,當(dāng)被請求這份列表時globalconfig內(nèi)部會創(chuàng)建一個initdatabaseutil的工具去檢查服務(wù)映射文件的配置文件的md5與之前記錄的是否一致(服務(wù)映射文件更新后,服務(wù)映射文件的配置文件的md5會發(fā)生變化),如果有變化,將更新的服務(wù)映射文件更新到數(shù)據(jù)庫中,然后更新配置文件md5記錄值。最后globalconfig可以通過訪問數(shù)據(jù)庫,得到需要維護(hù)的服務(wù)列表。
步驟3:準(zhǔn)備好需要的服務(wù),servicestarter獲取到了服務(wù)的列表根據(jù)服務(wù)列表中的描述信息可以區(qū)別出服務(wù)的綁定服務(wù)的方式是通過contentprovider方式同步綁定,還是通過context.bindservice()的異步方式綁定。后者會使用countdownlatch進(jìn)行同步控制。contentprovider重寫call方法,再call方法返回bundle已配置文件中的servicename為key,put該服務(wù)的binder。如若啟動失敗會加到失敗隊(duì)列中,會有重試的機(jī)會,當(dāng)達(dá)到重試上限會加入永久失敗列表,永久失敗列表中的服務(wù)想獲得重試的機(jī)會是一系列的判斷,列該服務(wù)所在的程序更新,或者得到重新裝載。
步驟4:管理準(zhǔn)備好的服務(wù),經(jīng)過步驟3后servicestarter準(zhǔn)備好一些服務(wù),這些服務(wù)通過調(diào)用servicemanger.addservice的方法被添加到servicemanger中,再添加的同時就為這些服務(wù)注冊linktodeath的死亡報(bào)告,當(dāng)該服務(wù)突然中斷死亡時,servicemanger會收到這樣一個報(bào)告,然后決定是否需要通知servicestarter重新準(zhǔn)備好該服務(wù)。
步驟5,第三方程序獲取服務(wù),使用servicemanger的getservice方法傳入對應(yīng)的key就可以獲取對應(yīng)服務(wù)。如果當(dāng)時服務(wù)沒有準(zhǔn)備好,會通知servicestarter快速準(zhǔn)備好該服務(wù),
servicestarter通過提供的key導(dǎo)數(shù)據(jù)中查詢服務(wù)映射文件中對應(yīng)服務(wù)的完整信息,然后重新準(zhǔn)備該服務(wù)。
這樣的一個通知和準(zhǔn)備都是同步的。
步驟6,使用服務(wù)完成需求。如先使用voicekey獲取到系統(tǒng)的錄音服務(wù),知道用戶說了什么,知道用戶說了什么之后便可以知道用戶的意圖,假設(shè)為播放音樂,這樣我們需要給用戶播放“我愛北京天安門”,這時我們可以調(diào)用tss,播放一段語音告訴用戶“將為您播放北京天安門”。最后調(diào)用media播放音樂。
如上述步驟,真正再完成需求時是非常便利的,只需要集中精力再業(yè)務(wù)邏輯層即可。
本技術(shù)提供一種系統(tǒng)服務(wù)的生命周期管理方法。android系統(tǒng)總是會用心去維護(hù)他的核心應(yīng)用以確保它整個系統(tǒng)的穩(wěn)定,而對其他程序維護(hù)確實(shí)相對比較粗暴的,導(dǎo)致大家不得不得想盡各種辦法去維護(hù)自己導(dǎo)致資源浪費(fèi),而本發(fā)明很好的解決了這些問題。本發(fā)明通過系統(tǒng)核心應(yīng)用boot保護(hù)servicecore,而在servicecore中通過servicestarter和servicemanger和service映射文件的配合完成對系統(tǒng)服務(wù)生命周期的管理。這樣的結(jié)合使用服務(wù)能夠提供穩(wěn)定的服務(wù)。對于使用者而言,什么時候想用服務(wù)總是存在。對于整個系統(tǒng)而言不存在肆意亂啟動,總是再真的需要時才申請資源。而且避免了系統(tǒng)核心永久性應(yīng)用無法更新的問題。讓servicecore和其管理的服務(wù)都能正常完成版本迭代。
維護(hù)簡單擴(kuò)展性強(qiáng),安全高效,性能消耗低。優(yōu)點(diǎn)包括:
(1)創(chuàng)新的服務(wù)信息映射表,簡單明了包含了遠(yuǎn)端服務(wù)位置功能和綁定方式。
(2)servivestarter首次啟動從映射表獲取數(shù)據(jù)存入到數(shù)據(jù)庫提高效率,方便動態(tài)維護(hù),內(nèi)部還有服務(wù)啟動失敗記錄,當(dāng)時機(jī)合適時會重新啟動服務(wù)。在獲取這些服務(wù)時無論服務(wù)的綁定方式,在此都會控制為同步,降低了開發(fā)的難度,增強(qiáng)了易用性。
(3)用系統(tǒng)的核心應(yīng)用去保護(hù)servicecore,servicecore再去管理其他的服務(wù),這樣的結(jié)構(gòu)能使整體更加強(qiáng)健。而且避免了系統(tǒng)核心永久性應(yīng)用無法更新的問題。讓servicecore和其管理的服務(wù)都能正常完成版本迭代。
本發(fā)明的各個部件實(shí)施方式可以以硬件實(shí)現(xiàn),或者以在一個或者多個處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。應(yīng)該注意的是上述實(shí)施方式對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施方式。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
雖然結(jié)合附圖描述了本發(fā)明的實(shí)施方式,但是本領(lǐng)域技術(shù)人員可以在不脫離本發(fā)明的精神和范圍的情況下做出各種修改和變型,這樣的修改和變型均落入由所附權(quán)利要求所限定的范圍之內(nèi)。