本發(fā)明涉及智能設(shè)備技術(shù)領(lǐng)域,尤其涉及一種開機(jī)方法、開機(jī)裝置及Android智能設(shè)備。
背景技術(shù):
隨著采用Android系統(tǒng)的Android電視的飛速發(fā)展,越來越多的電視應(yīng)用應(yīng)運(yùn)而生。娛樂電視已經(jīng)成為一種趨勢,因此電視體驗(yàn)顯得尤為重要,眾多電視應(yīng)用(包括第三方應(yīng)用)為了提升產(chǎn)品自身的體驗(yàn)性,都會采取開機(jī)啟動(dòng)某些服務(wù)的方式,后臺監(jiān)聽用戶的操作,提供實(shí)時(shí)響應(yīng),來提升用戶的好感度。由于有些服務(wù)是在Init.rc里面啟動(dòng)的,而此時(shí)應(yīng)用開機(jī)啟動(dòng)的方式一般都是采取監(jiān)聽系統(tǒng)開機(jī)廣播ACTION_BOOT_COMPLETED,這樣一來在開機(jī)過程中,眾多應(yīng)用在集中的時(shí)間啟動(dòng),CPU占用相當(dāng)高,很容易引起系統(tǒng)卡頓。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的主要目的在于提供一種開機(jī)方法,旨在解決開機(jī)過程中眾多應(yīng)用集中啟動(dòng),CPU占用率過高造成系統(tǒng)卡頓的技術(shù)問題。
為實(shí)現(xiàn)上述目的,本發(fā)明提出一種開機(jī)方法,包括以下步驟:
在Zygote創(chuàng)建的SystemServer進(jìn)程中啟動(dòng)ActivityManagerService;
ActivityManagerService發(fā)送用于啟動(dòng)第一優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用的自定義BOOT_P0廣播;
在所述自定義BOOT_P0廣播發(fā)出后的預(yù)設(shè)時(shí)間之后,發(fā)送用于啟動(dòng)第二優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用的自定義BOOT_P1廣播;
在所述自定義BOOT_P1廣播發(fā)出后的預(yù)設(shè)時(shí)間之后,發(fā)送用于啟動(dòng)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播。
進(jìn)一步地,所述在所述自定義BOOT_P1廣播發(fā)出預(yù)設(shè)時(shí)間之后,發(fā)送用于啟動(dòng)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播的步驟之后,還包括:
所述第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)依據(jù)在receivers隊(duì)列中的優(yōu)先級順序接收所述源生ACTION_BOOT_COMPLETED廣播并啟動(dòng)。
進(jìn)一步地,所述第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)依據(jù)在receivers隊(duì)列中的優(yōu)先級順序接收所述源生ACTION_BOOT_COMPLETED廣播并啟動(dòng)的步驟包括:
分別用數(shù)組保存每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,形成receivers隊(duì)列;
依據(jù)每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,利用broadcastIntentLocked在receivers隊(duì)列中進(jìn)行優(yōu)先級排序;
實(shí)時(shí)更新receivers隊(duì)列中每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)所對應(yīng)的數(shù)組信息;
依據(jù)更新后的數(shù)組信息調(diào)整第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在receivers隊(duì)列中的優(yōu)先級順序。
進(jìn)一步地,所述結(jié)構(gòu)體的元素包括用戶使用頻率、開機(jī)絕對時(shí)間、Activity名稱及用戶使用時(shí)間。
進(jìn)一步地,所述預(yù)設(shè)時(shí)間的預(yù)設(shè)過程包括以下步驟:
檢測智能設(shè)備的硬件配置和自定義BOOT_P0廣播或自定義BOOT_P1廣播啟動(dòng)的服務(wù)數(shù)量;
根據(jù)智能設(shè)備的硬件配置和自定義BOOT_P0廣播或自定義BOOT_P1廣播啟動(dòng)的服務(wù)數(shù)量,調(diào)試自定義BOOT_P0廣播和自定義BOOT_P1廣播之間的時(shí)間間隔。
本發(fā)明的另一目的在于提供一種開機(jī)裝置,該開機(jī)裝置包括:
ActivityManagerService啟動(dòng)模塊,在Zygote創(chuàng)建的SystemServer進(jìn)程中啟動(dòng)ActivityManagerService;
自定義BOOT_P0廣播發(fā)送模塊,利用ActivityManagerService發(fā)送用于啟動(dòng)第一優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用的自定義BOOT_P0廣播;
自定義BOOT_P1廣播發(fā)送模塊,在所述自定義BOOT_P0廣播發(fā)出預(yù)設(shè)時(shí)間之后,發(fā)送用于啟動(dòng)第二優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用的自定義BOOT_P1廣播;及
源生ACTION_BOOT_COMPLETED廣播發(fā)送模塊,在所述自定義BOOT_P1廣播發(fā)出預(yù)設(shè)時(shí)間之后,發(fā)送用于啟動(dòng)第三方應(yīng)用或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播。
進(jìn)一步地,該優(yōu)化裝置還包括:
源生ACTION_BOOT_COMPLETED廣播接收模塊,控制所述第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)依據(jù)在receivers隊(duì)列中的優(yōu)先級順序接收所述源生ACTION_BOOT_COMPLETED廣播并啟動(dòng)。
進(jìn)一步地,所述源生ACTION_BOOT_COMPLETED廣播接收模塊包括:
receivers隊(duì)列形成單元,分別用數(shù)組保存每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,形成receivers隊(duì)列;
優(yōu)先級排序單元,依據(jù)每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,利用broadcastIntentLocked在receivers隊(duì)列中進(jìn)行優(yōu)先級排序;
數(shù)組信息更新單元,實(shí)時(shí)更新receivers隊(duì)列中每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)所對應(yīng)的數(shù)組信息;及
優(yōu)先級順序調(diào)整單元,依據(jù)更新后的數(shù)組信息調(diào)整第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在receivers隊(duì)列中的優(yōu)先級順序。
進(jìn)一步地,所述結(jié)構(gòu)體的元素包括用戶使用頻率、開機(jī)絕對時(shí)間、Activity名稱及用戶使用時(shí)間。
進(jìn)一步地,該開機(jī)裝置還包括:
檢測模塊,檢測智能設(shè)備的硬件配置和自定義BOOT_P0廣播或自定義BOOT_P1廣播啟動(dòng)的服務(wù)數(shù)量;及
調(diào)試模塊,根據(jù)智能設(shè)備的硬件配置和自定義BOOT_P0廣播或自定義BOOT_P1廣播啟動(dòng)的服務(wù)數(shù)量,調(diào)試自定義BOOT_P0廣播和自定義BOOT_P1廣播之間的時(shí)間間隔。
本發(fā)明還提供一種Android智能設(shè)備,該Android智能設(shè)備包括如上所述的開機(jī)裝置。
本發(fā)明的開機(jī)方法,在開機(jī)過程中由Zygote進(jìn)程創(chuàng)建的SystemServer進(jìn)程中啟動(dòng)ActivityManagerService,由ActivityManagerService在FinishBooting函數(shù)或其他進(jìn)程中發(fā)送自定義BOOT_P0廣播,以啟動(dòng)第一優(yōu)先級的系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用,在自定義BOOT_P0廣播發(fā)出預(yù)設(shè)時(shí)間之后,發(fā)送自定義BOOT_P1廣播,以啟動(dòng)優(yōu)先級僅次于自定義BOOT_P0廣播啟動(dòng)的系統(tǒng)服務(wù)或應(yīng)用,在自定義BOOT_P1廣播發(fā)出預(yù)設(shè)時(shí)間之后,發(fā)送啟動(dòng)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播,根據(jù)需要啟動(dòng)的系統(tǒng)服務(wù)的多少,還可以增加自定義BOOT_P廣播,以在開機(jī)過程中,將要啟動(dòng)的應(yīng)用或服務(wù)按照優(yōu)先級的順序先后進(jìn)行啟動(dòng),避免了眾多應(yīng)用或服務(wù)集中于同一時(shí)刻啟動(dòng),占用CPU造成的系統(tǒng)卡頓,減輕了系統(tǒng)負(fù)擔(dān),提高了系統(tǒng)運(yùn)行的流暢性。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖示出的結(jié)構(gòu)獲得其他的附圖。
圖1為本發(fā)明開機(jī)方法一實(shí)施例的流程圖;
圖2為圖1中步驟S50的具體流程圖;
圖3為本發(fā)明中預(yù)設(shè)時(shí)間的預(yù)設(shè)過程一實(shí)施例的流程圖;
圖4為本發(fā)明開機(jī)裝置一實(shí)施例的功能模塊圖;
圖5為圖4中源生ACTION_BOOT_COMPLETED廣播接收模塊的結(jié)構(gòu)示意圖。
附圖標(biāo)號說明:
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。
具體實(shí)施方式
應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種開機(jī)方法,應(yīng)用于智能設(shè)備。
參照圖1,圖1為本發(fā)明開機(jī)方法一實(shí)施例的流程圖,在本實(shí)施例中,該開機(jī)方法包括以下步驟:
S10:在Zygote創(chuàng)建的SystemServer進(jìn)程中啟動(dòng)ActivityManagerService;
S20:ActivityManagerService發(fā)送用于啟動(dòng)第一優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用的自定義BOOT_P0廣播;
S30:在所述自定義BOOT_P0廣播發(fā)出后的預(yù)設(shè)時(shí)間之后,發(fā)送用于啟動(dòng)第二優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用的自定義BOOT_P1廣播;
S40:在所述自定義BOOT_P1廣播發(fā)出后的預(yù)設(shè)時(shí)間之后,發(fā)送用于啟動(dòng)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播;
S50:所述第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)依據(jù)在receivers隊(duì)列中的優(yōu)先級順序接收所述源生ACTION_BOOT_COMPLETED廣播并啟動(dòng)。
本實(shí)施例的開機(jī)方法,主要用于對基于Android平臺的智能設(shè)備的開機(jī)啟動(dòng)過程進(jìn)行優(yōu)化,在開機(jī)啟動(dòng)過程中,首先由Zygote進(jìn)程創(chuàng)建SystemServer進(jìn)程,由SystemServer進(jìn)程啟動(dòng)關(guān)鍵的Service,也即ActivityManagerService,在正常啟動(dòng)的情況下ActivityManagerService會在FinishBooting函數(shù)中發(fā)送BOOT_COMPLETED廣播,或者由ActivityManagerService在其他函數(shù)中啟動(dòng)FinishBooting函數(shù)發(fā)送BOOT_COMPLETED廣播,或者由ActivityManagerService在其他進(jìn)程中發(fā)送BOOT_COMPLETED廣播,然后所有的第三方應(yīng)用或系統(tǒng)服務(wù)均會接收該BOOT_COMPLETED廣播進(jìn)行開機(jī)啟動(dòng),這樣會造成系統(tǒng)卡頓,運(yùn)行不暢,本發(fā)明的關(guān)鍵點(diǎn)就在于將ActivityManagerService發(fā)送的BOOT_COMPLETED廣播替換為用于啟動(dòng)系統(tǒng)開機(jī)運(yùn)行必需的系統(tǒng)服務(wù)的自定義BOOT_P廣播,所述自定義BOOT_P廣播根據(jù)對應(yīng)的啟動(dòng)服務(wù)自定義編寫,對應(yīng)所要啟動(dòng)的系統(tǒng)服務(wù),根據(jù)系統(tǒng)服務(wù)默認(rèn)的優(yōu)先級將啟動(dòng)第一優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用0的自定義廣播命名為BOOT_P0,將啟動(dòng)第二優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用1的自定義廣播命名為BOOT_P1,根據(jù)需要可以對優(yōu)先級次于Service1的Service2設(shè)定啟動(dòng)的自定義廣播BOOT_P2,自定義BOOT_P1廣播的發(fā)送時(shí)間在自定義BOOT_P0廣播發(fā)出預(yù)設(shè)時(shí)間之后,所述預(yù)設(shè)時(shí)間視開機(jī)啟動(dòng)過程中每一自定義廣播啟動(dòng)服務(wù)的多少及系統(tǒng)硬件的配置進(jìn)行自行定義,一般定義為1秒,若系統(tǒng)硬件配置較差,或者自定義廣播啟動(dòng)的服務(wù)太多,則預(yù)設(shè)時(shí)間會多于1秒,若系統(tǒng)硬件配置較差,或者自定義廣播啟動(dòng)的服務(wù)較少,則預(yù)設(shè)時(shí)間會少于1秒,若Service0占用CPU的比例較大,則距離發(fā)送自定義BOOT_P1廣播的間隔就較長,反之則時(shí)間間隔較短。
在系統(tǒng)開機(jī)必需的系統(tǒng)服務(wù)啟動(dòng)之后,F(xiàn)inishBooting函數(shù)或FinishBooting函數(shù)的啟動(dòng)函數(shù)啟動(dòng)FinishBooting函數(shù)或其他進(jìn)程會發(fā)出用于啟動(dòng)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播,第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)會接收所述源生ACTION_BOOT_COMPLETED廣播進(jìn)行啟動(dòng),第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在啟動(dòng)過程中,為了避免集中啟動(dòng)造成系統(tǒng)卡頓,也會在內(nèi)部給需要啟動(dòng)的第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)一個(gè)優(yōu)先級排序,也即將所有需要開機(jī)啟動(dòng)的第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在receivers隊(duì)列中進(jìn)行優(yōu)先級排序,然后依據(jù)每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在receivers隊(duì)列中的優(yōu)先級順序接收源生ACTION_BOOT_COMPLETED廣播進(jìn)行啟動(dòng),避免了所有第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)同時(shí)啟動(dòng),占用CPU造成系統(tǒng)卡頓的問題。
本實(shí)施例的開機(jī)方法,在開機(jī)過程中由Zygote進(jìn)程創(chuàng)建的SystemServer進(jìn)程中啟動(dòng)ActivityManagerService,由ActivityManagerService在FinishBooting函數(shù)或FinishBooting函數(shù)的啟動(dòng)函數(shù)啟動(dòng)FinishBooting函數(shù)或其他進(jìn)程中發(fā)送自定義BOOT_P0廣播,以啟動(dòng)第一優(yōu)先級的系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用,在自定義BOOT_P0廣播發(fā)出預(yù)設(shè)時(shí)間之后,發(fā)送自定義BOOT_P1廣播,以啟動(dòng)優(yōu)先級僅次于自定義BOOT_P0廣播啟動(dòng)的系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用,在自定義BOOT_P1廣播發(fā)出預(yù)設(shè)時(shí)間之后,發(fā)送啟動(dòng)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播,根據(jù)需要啟動(dòng)的系統(tǒng)服務(wù)的多少,還可以增加自定義BOOT_P廣播,最后由第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)依據(jù)在receivers隊(duì)列中的優(yōu)先級順序接收所述源生ACTION_BOOT_COMPLETED廣播,以在開機(jī)過程中,將要啟動(dòng)的應(yīng)用或服務(wù)按照優(yōu)先級的順序先后進(jìn)行啟動(dòng),避免了眾多應(yīng)用或服務(wù)集中于同一時(shí)刻啟動(dòng),占用CPU造成的系統(tǒng)卡頓,減輕了系統(tǒng)負(fù)擔(dān),提高了系統(tǒng)運(yùn)行的流暢性。
參照圖2,步驟S50包括:
S51:分別用數(shù)組保存每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,形成receivers隊(duì)列;
S52:依據(jù)每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,利用broadcastIntentLocked在receivers隊(duì)列中進(jìn)行優(yōu)先級排序;
S53:實(shí)時(shí)更新receivers隊(duì)列中每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)所對應(yīng)的數(shù)組信息;
S54:依據(jù)更新后的數(shù)組信息調(diào)整第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在receivers隊(duì)列中的優(yōu)先級順序。
本實(shí)施例的開機(jī)方法,第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)依據(jù)在receivers隊(duì)列中的優(yōu)先級順序接收所述源生ACTION_BOOT_COMPLETED廣播時(shí),首先分別用數(shù)組保存每一個(gè)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,所述結(jié)構(gòu)體包括該第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的開機(jī)絕對時(shí)間,Activity名稱,用戶使用該第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的時(shí)間及頻率,上述四種信息構(gòu)成每一結(jié)構(gòu)體或數(shù)組的組成元素,然后每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)對應(yīng)的數(shù)組結(jié)合起來形成receivers隊(duì)列,之后依據(jù)每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,利用broadcastIntentLocked算法在receivers隊(duì)列中進(jìn)行優(yōu)先級排序,也即,將每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的用戶使用頻率、開機(jī)絕對時(shí)間、Activity名稱、及用戶使用時(shí)間等信息作為broadcastIntentLocked算法的變量,綜合考慮各項(xiàng)標(biāo)準(zhǔn)進(jìn)行優(yōu)先等級排序。
由于每次開機(jī)啟動(dòng)時(shí)或者啟動(dòng)后對所述第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的操作不同,為了在下一次開機(jī)時(shí)在保證系統(tǒng)流暢的前提下獲得更好的用戶體驗(yàn),該系統(tǒng)會實(shí)時(shí)更新receivers隊(duì)列中每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)所對應(yīng)的數(shù)組信息,對每一次針對第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)進(jìn)行的操作進(jìn)行記錄,然后進(jìn)行數(shù)組信息的實(shí)時(shí)更新,最后根據(jù)更新后的數(shù)組信息,也即每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的用戶使用頻率、開機(jī)絕對時(shí)間、Activity名稱、及用戶使用時(shí)間,重新利用broadcastIntentLocked算法在receivers隊(duì)列中進(jìn)行優(yōu)先級排序,以保證使用頻率較高、開機(jī)絕對時(shí)間短,使用時(shí)間比較長的第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在下一次的啟動(dòng)中,最先接收FinishBooting函數(shù)發(fā)送的源生ACTION_BOOT_COMPLETED廣播。
參照圖3,所述預(yù)設(shè)時(shí)間的預(yù)設(shè)過程包括以下步驟:
S80:檢測智能設(shè)備的硬件配置和自定義BOOT_P0廣播或自定義BOOT_P1廣播啟動(dòng)的服務(wù)數(shù)量;
S90:根據(jù)智能設(shè)備的硬件配置和自定義BOOT_P0廣播或自定義BOOT_P1廣播啟動(dòng)的服務(wù)數(shù)量,調(diào)試自定義BOOT_P0廣播和自定義BOOT_P1廣播之間的時(shí)間間隔。
本實(shí)施例中,步驟S30和S40中的預(yù)設(shè)時(shí)間進(jìn)行自行定義的過程如下,首先開機(jī)系統(tǒng)會檢測智能設(shè)備的硬件配置和自定義BOOT_P0廣播或自定義BOOT_P1廣播在本次開機(jī)中啟動(dòng)的服務(wù)數(shù)量,然后根據(jù)智能設(shè)備的硬件配置和BOOT_P0廣播或自定義BOOT_P1廣播在本次開機(jī)中啟動(dòng)的服務(wù)數(shù)量,嘗試開機(jī)啟動(dòng),如果視頻卡頓,則在重新啟動(dòng)時(shí)適當(dāng)延長自定義BOOT_P0廣播和自定義BOOT_P1廣播之間的時(shí)間間隔,重復(fù)調(diào)試,保證開機(jī)系統(tǒng)的運(yùn)行流暢,所述時(shí)間間隔,也即預(yù)設(shè)時(shí)間一般定義為1秒,若系統(tǒng)硬件配置較差,或者自定義廣播啟動(dòng)的服務(wù)太多,則預(yù)設(shè)時(shí)間會多于1秒,若系統(tǒng)硬件配置較差,或者自定義廣播啟動(dòng)的服務(wù)較少,則預(yù)設(shè)時(shí)間會少于1秒。
參照圖4,圖4為本發(fā)明開機(jī)裝置一實(shí)施例的功能模塊圖,在本實(shí)施例中,該優(yōu)化裝置100包括:
ActivityManagerService啟動(dòng)模塊10,在Zygote創(chuàng)建的SystemServer進(jìn)程中啟動(dòng)ActivityManagerService;
自定義BOOT_P0廣播發(fā)送模塊20,利用ActivityManagerService發(fā)送用于啟動(dòng)第一優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用的自定義BOOT_P0廣播;
自定義BOOT_P1廣播發(fā)送模塊30,在所述自定義BOOT_P0廣播發(fā)出后的預(yù)設(shè)時(shí)間之后,發(fā)送用于啟動(dòng)第二優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用的自定義BOOT_P1廣播;
源生ACTION_BOOT_COMPLETED廣播發(fā)送模塊40,在所述自定義BOOT_P1廣播發(fā)出后的預(yù)設(shè)時(shí)間之后,發(fā)送用于啟動(dòng)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播;
源生ACTION_BOOT_COMPLETED廣播接收模塊50,控制所述第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)依據(jù)在receivers隊(duì)列中的優(yōu)先級順序接收所述源生ACTION_BOOT_COMPLETED廣播并啟動(dòng)。
本實(shí)施例的開機(jī)優(yōu)化裝置100,包括ActivityManagerService啟動(dòng)模塊10、自定義BOOT_P0廣播發(fā)送模塊20、自定義BOOT_P1廣播發(fā)送模塊30、源生ACTION_BOOT_COMPLETED廣播發(fā)送模塊40、源生ACTION_BOOT_COMPLETED廣播接收模塊50。在開機(jī)啟動(dòng)過程中,首先由ActivityManagerService啟動(dòng)模塊10控制Zygote進(jìn)程創(chuàng)建SystemServer進(jìn)程,由SystemServer進(jìn)程啟動(dòng)關(guān)鍵的Service,也即ActivityManagerService,在正常啟動(dòng)的情況下ActivityManagerService會在FinishBooting函數(shù)中發(fā)送BOOT_COMPLETED廣播,或者由ActivityManagerService在其他函數(shù)中啟動(dòng)FinishBooting函數(shù)發(fā)送BOOT_COMPLETED廣播,或者由ActivityManagerService在其他進(jìn)程中發(fā)送BOOT_COMPLETED廣播,然后所有的第三方應(yīng)用、及系統(tǒng)服務(wù)均會接收該BOOT_COMPLETED廣播進(jìn)行開機(jī)啟動(dòng),這樣會造成系統(tǒng)卡頓,運(yùn)行不暢,本發(fā)明的關(guān)鍵點(diǎn)就在于將ActivityManagerService在FinishBooting函數(shù)或FinishBooting函數(shù)的啟動(dòng)函數(shù)或其他進(jìn)程中發(fā)送的BOOT_COMPLETED廣播替換為用于啟動(dòng)系統(tǒng)開機(jī)運(yùn)行必需的系統(tǒng)服務(wù)的自定義BOOT_P廣播,由自定義BOOT_P0廣播發(fā)送模塊20根據(jù)系統(tǒng)服務(wù)默認(rèn)的優(yōu)先級針對第一優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用0發(fā)送自定義BOOT_P0廣播,自定義BOOT_P1廣播發(fā)送模塊30針對第二優(yōu)先級系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用1發(fā)送自定義BOOT_P1廣播,根據(jù)需要可以對優(yōu)先級次于Service1的Service2設(shè)定啟動(dòng)的自定義廣播BOOT_P2,自定義BOOT_P1廣播的發(fā)送時(shí)間在自定義BOOT_P0廣播發(fā)出預(yù)設(shè)時(shí)間之后,所述預(yù)設(shè)時(shí)間視開機(jī)啟動(dòng)過程中服務(wù)的大小進(jìn)行自行定義,若Service0占用CPU的比例較大,則距離發(fā)送自定義BOOT_P1廣播的間隔就較長,反之則時(shí)間間隔較短。
在系統(tǒng)開機(jī)必需的Service啟動(dòng)之后,源生ACTION_BOOT_COMPLETED廣播發(fā)送模塊40會控制FinishBooting函數(shù)或FinishBooting函數(shù)的啟動(dòng)函數(shù)啟動(dòng)FinishBooting函數(shù)或其他進(jìn)程發(fā)出用于啟動(dòng)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播,第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)會接收所述源生ACTION_BOOT_COMPLETED廣播進(jìn)行啟動(dòng),在第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在啟動(dòng)過程中,為了避免集中啟動(dòng)造成系統(tǒng)卡頓,也會在內(nèi)部給需要啟動(dòng)的第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)一個(gè)優(yōu)先級排序,也即將所有需要開機(jī)啟動(dòng)的第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在receivers隊(duì)列中進(jìn)行優(yōu)先級排序,然后由ACTION_BOOT_COMPLETED廣播接收模塊50控制每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)依據(jù)在receivers隊(duì)列中的優(yōu)先級順序接收源生ACTION_BOOT_COMPLETED廣播進(jìn)行啟動(dòng),避免了所有第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)同時(shí)啟動(dòng),占用CPU造成系統(tǒng)卡頓的問題。
本實(shí)施例的開機(jī)裝置100,在開機(jī)過程中由ActivityManagerService啟動(dòng)模塊10在Zygote創(chuàng)建的SystemServer進(jìn)程中啟動(dòng)ActivityManagerService,由自定義BOOT_P0廣播發(fā)送模塊20利用ActivityManagerService在FinishBooting函數(shù)或FinishBooting函數(shù)的啟動(dòng)函數(shù)啟動(dòng)FinishBooting函數(shù)或其他進(jìn)程中發(fā)送自定義BOOT_P0廣播,以啟動(dòng)第一優(yōu)先級的系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用,在BOOT_P0廣播發(fā)出預(yù)設(shè)時(shí)間之后,由自定義BOOT_P1廣播發(fā)送模塊30發(fā)送自定義BOOT_P1廣播,以啟動(dòng)優(yōu)先級僅次于自定義BOOT_P0廣播啟動(dòng)的系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用,在自定義BOOT_P1廣播發(fā)出預(yù)設(shè)時(shí)間之后,由源生ACTION_BOOT_COMPLETED廣播發(fā)送模塊40發(fā)送啟動(dòng)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播,根據(jù)需要啟動(dòng)的系統(tǒng)Service的多少,還可以增加自定義BOOT_P廣播,最后由源生ACTION_BOOT_COMPLETED廣播接收模塊50控制所述第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在receivers隊(duì)列中的優(yōu)先級順序接收所述源生ACTION_BOOT_COMPLETED廣播,以在開機(jī)過程中,將要啟動(dòng)的應(yīng)用或服務(wù)按照優(yōu)先級的順序先后進(jìn)行啟動(dòng),避免了眾多應(yīng)用或服務(wù)集中于同一時(shí)刻啟動(dòng),占用CPU造成的系統(tǒng)卡頓,減輕了系統(tǒng)負(fù)擔(dān),提高了系統(tǒng)運(yùn)行的流暢性。
參照圖5,所述源生ACTION_BOOT_COMPLETED廣播接收模塊50包括:
receivers隊(duì)列形成單元51,分別用數(shù)組保存每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,形成receivers隊(duì)列;
優(yōu)先級排序單元52,依據(jù)每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,利用broadcastIntentLocked在receivers隊(duì)列中進(jìn)行優(yōu)先級排序;
數(shù)組信息更新單元53,實(shí)時(shí)更新receivers隊(duì)列中每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)所對應(yīng)的數(shù)組信息;
優(yōu)先級順序調(diào)整單元54,依據(jù)更新后的數(shù)組信息調(diào)整第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在receivers隊(duì)列中的優(yōu)先級順序。
本實(shí)施例的開機(jī)裝置100,源生ACTION_BOOT_COMPLETED廣播接收模塊50包括receivers隊(duì)列形成單元51、優(yōu)先級排序單元52、數(shù)組信息更新單元53、及優(yōu)先級順序調(diào)整單元54。receivers隊(duì)列形成單元51用于分別用數(shù)組保存每一個(gè)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,所述結(jié)構(gòu)體包括該第三方應(yīng)用的開機(jī)絕對時(shí)間,Activity名稱,用戶使用該第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的時(shí)間及頻率,上述四種信息構(gòu)成每一結(jié)構(gòu)體或數(shù)組的組成元素,然后每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)對應(yīng)的數(shù)組結(jié)合起來形成receivers隊(duì)列優(yōu)先級排序單元52依據(jù)每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的結(jié)構(gòu)體,利用broadcastIntentLocked算法在receivers隊(duì)列中進(jìn)行優(yōu)先級排序,也即,將每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的用戶使用頻率、開機(jī)絕對時(shí)間、Activity名稱、及用戶使用時(shí)間等信息作為broadcastIntentLocked算法的變量,綜合考慮各項(xiàng)標(biāo)準(zhǔn)進(jìn)行優(yōu)先等級排序。
由于每次開機(jī)啟動(dòng)時(shí)或者啟動(dòng)后對所述第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的操作不同,為了在下一次開機(jī)時(shí)在保證系統(tǒng)流暢的前提下獲得更好的用戶體驗(yàn),數(shù)組信息更新單元53會實(shí)時(shí)更新receivers隊(duì)列中每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)所對應(yīng)的數(shù)組信息,對每一次針對第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)進(jìn)行的操作進(jìn)行記錄,然后進(jìn)行數(shù)組信息的實(shí)時(shí)更新,優(yōu)先級順序調(diào)整單元54根據(jù)更新后的數(shù)組信息,也即每一第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的用戶使用頻率、開機(jī)絕對時(shí)間、Activity名稱、及用戶使用時(shí)間,重新利用broadcastIntentLocked算法在receivers隊(duì)列中進(jìn)行優(yōu)先級排序,以保證使用頻率較高、開機(jī)絕對時(shí)間短,使用時(shí)間比較長的第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在下一次的啟動(dòng)中,最先接收FinishBooting函數(shù)發(fā)送的源生ACTION_BOOT_COMPLETED廣播。
參照圖4,該開機(jī)裝置100還包括:
檢測模塊60,檢測智能設(shè)備的硬件配置和自定義BOOT_P0廣播或自定義BOOT_P1廣播啟動(dòng)的服務(wù)數(shù)量;及
調(diào)試模塊70,根據(jù)智能設(shè)備的硬件配置和自定義BOOT_P0廣播或自定義BOOT_P1廣播啟動(dòng)的服務(wù)數(shù)量,調(diào)試自定義BOOT_P0廣播和自定義BOOT_P1廣播之間的時(shí)間間隔。
本實(shí)施例中,該開機(jī)裝置100還包括檢測模塊60和調(diào)試模塊70,檢測模塊60用于開機(jī)系統(tǒng)檢測智能設(shè)備的硬件配置和自定義BOOT_P0廣播或自定義BOOT_P1廣播在本次開機(jī)中啟動(dòng)的服務(wù)數(shù)量,調(diào)試模塊70用于根據(jù)智能設(shè)備的硬件配置和BOOT_P0廣播或自定義BOOT_P1廣播在本次開機(jī)中啟動(dòng)的服務(wù)數(shù)量,調(diào)試自定義BOOT_P0廣播和自定義BOOT_P1廣播之間的時(shí)間間隔,在開機(jī)啟動(dòng)過程中,如果視頻卡頓,則在重新啟動(dòng)時(shí)適當(dāng)延長自定義BOOT_P0廣播和自定義BOOT_P1廣播之間的時(shí)間間隔,重復(fù)調(diào)試,保證開機(jī)系統(tǒng)的運(yùn)行流暢,所述時(shí)間間隔,也即預(yù)設(shè)時(shí)間一般定義為1秒,若系統(tǒng)硬件配置較差,或者自定義廣播啟動(dòng)的服務(wù)太多,則預(yù)設(shè)時(shí)間會多于1秒,若系統(tǒng)硬件配置較差,或者自定義廣播啟動(dòng)的服務(wù)較少,則預(yù)設(shè)時(shí)間會少于1秒。
本發(fā)明還提供一種Android智能設(shè)備,該Android智能設(shè)備包括如上所述的開機(jī)裝置100,該智能設(shè)備為基于Android平臺的智能電視。該智能電視在開機(jī)過程中,由ActivityManagerService啟動(dòng)模塊10在Zygote創(chuàng)建的SystemServer進(jìn)程中啟動(dòng)ActivityManagerService,由自定義BOOT_P0廣播發(fā)送模塊20利用ActivityManagerService在FinishBooting函數(shù)或FinishBooting函數(shù)的啟動(dòng)函數(shù)啟動(dòng)FinishBooting函數(shù)或其他進(jìn)程中發(fā)送自定義BOOT_P0廣播,以啟動(dòng)第一優(yōu)先級的系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用,在BOOT_P0廣播發(fā)出預(yù)設(shè)時(shí)間之后,由自定義BOOT_P1廣播發(fā)送模塊30發(fā)送自定義BOOT_P1廣播,以啟動(dòng)優(yōu)先級僅次于BOOT_P0廣播啟動(dòng)的系統(tǒng)服務(wù)或系統(tǒng)應(yīng)用,在BOOT_P1廣播發(fā)出預(yù)設(shè)時(shí)間之后,由源生ACTION_BOOT_COMPLETED廣播發(fā)送模塊40發(fā)送啟動(dòng)第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)的源生ACTION_BOOT_COMPLETED廣播,根據(jù)需要啟動(dòng)的系統(tǒng)Service的多少,還可以增加自定義BOOT_P廣播,最后由源生ACTION_BOOT_COMPLETED廣播接收模塊50控制所述第三方應(yīng)用和/或第三優(yōu)先級系統(tǒng)服務(wù)在receivers隊(duì)列中的優(yōu)先級順序接收所述源生ACTION_BOOT_COMPLETED廣播,以在開機(jī)過程中,將要啟動(dòng)的應(yīng)用或服務(wù)按照優(yōu)先級的順序先后進(jìn)行啟動(dòng),避免了眾多應(yīng)用或服務(wù)集中于同一時(shí)刻啟動(dòng),占用CPU造成的系統(tǒng)卡頓,減輕了智能電視Android開機(jī)系統(tǒng)的負(fù)擔(dān),提高了該智能電視系統(tǒng)運(yùn)行的流暢性。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。