嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法及裝置的制造方法
【專利摘要】本發(fā)明提供了嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法及裝置,該方法包括:在采用多線程并行加載嵌入式系統(tǒng)啟動(dòng)所需的預(yù)加載類前,檢測當(dāng)前的預(yù)加載類是否為內(nèi)部類;若是,則解析出當(dāng)前的預(yù)加載類所屬的宿主類;并確定出該宿主類的加載線程;在所述宿主類加載完之后,通過所述加載線程加載所述當(dāng)前的預(yù)加載類。應(yīng)用本發(fā)明,可避免內(nèi)部類加載無基礎(chǔ)的異常情況,保障嵌入式系統(tǒng)的預(yù)加載類的正常加載的同時(shí),提高嵌入式系統(tǒng)運(yùn)行的穩(wěn)定性,從而提高用戶體驗(yàn)。
【專利說明】
嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法及裝置
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及操作系統(tǒng)技術(shù)領(lǐng)域,具體而言,本發(fā)明涉及嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法 及裝置。
【背景技術(shù)】
[0002] 智能電視具有全開放式平臺(tái),搭載了操作系統(tǒng),可以由用戶自行安裝和卸載軟件、 游戲等第三方服務(wù)商提供的應(yīng)用程序,擁有傳統(tǒng)電視廠商所不具備的應(yīng)用平臺(tái)優(yōu)勢。
[0003] 目前,智能電視通??梢源钶dAndroid(安卓)操作系統(tǒng)等嵌入式系統(tǒng);在智能電視 完成嵌入式系統(tǒng)的啟動(dòng)之后,用戶可以通過已安裝的各種應(yīng)用程序,實(shí)現(xiàn)網(wǎng)絡(luò)搜索、視頻點(diǎn) 播、數(shù)字音樂、網(wǎng)絡(luò)新聞、網(wǎng)絡(luò)視頻電話等各種應(yīng)用服務(wù),帶給用戶更便捷的體驗(yàn)。
[0004] 實(shí)際應(yīng)用中,嵌入式系統(tǒng)的啟動(dòng)流程包括如下基本步驟:系統(tǒng)上電、系統(tǒng)引導(dǎo)程 序、啟動(dòng)內(nèi)核Kernel、創(chuàng)建初始化進(jìn)程Ini t、創(chuàng)建系統(tǒng)運(yùn)行所需軟件庫Runtime、創(chuàng)建守護(hù)進(jìn) 程Demons、創(chuàng)建用戶進(jìn)程孵化器Zygote、創(chuàng)建虛擬機(jī)VM、創(chuàng)建系統(tǒng)服務(wù)進(jìn)程System Server、 啟動(dòng)應(yīng)用啟動(dòng)器Launcher。
[0005] 事實(shí)上,嵌入式系統(tǒng)的啟動(dòng)過程中,需要載入一系列基礎(chǔ)類(本文中也可稱為預(yù)加 載類)。通過Zygote進(jìn)程將這些基礎(chǔ)類作為嵌入式系統(tǒng)的預(yù)加載類載入后,這些預(yù)加載類將 常駐于內(nèi)存。這樣,后續(xù)應(yīng)用或者服務(wù)啟動(dòng)時(shí),就不需要再去加載這些預(yù)加載類,以此減少 應(yīng)用或者服務(wù)的啟動(dòng)時(shí)間。
[0006]但是隨著智能電視中安裝的應(yīng)用程序的增加,本發(fā)明的發(fā)明人發(fā)現(xiàn),嵌入式系統(tǒng) 需要載入的基礎(chǔ)類也越來越多,智能電視的啟動(dòng)速度越來越慢,降低了用戶體驗(yàn)。
[0007] 雖然,現(xiàn)有提供了多線程并行加載的方案,以此加快啟動(dòng)速度。但是,本發(fā)明的發(fā) 明人發(fā)現(xiàn),在應(yīng)用現(xiàn)有并行加載方案中,經(jīng)常發(fā)生加載異常,導(dǎo)致系統(tǒng)運(yùn)行異常。
[0008] 因此,有必要提供一種能夠保障預(yù)加載類的正常加載,提高嵌入式系統(tǒng)運(yùn)行的穩(wěn) 定性的啟動(dòng)優(yōu)化方案。
【發(fā)明內(nèi)容】
[0009] 針對(duì)上述現(xiàn)有技術(shù)存在的缺陷,本發(fā)明提供了嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法及裝置, 用以保障嵌入式系統(tǒng)的預(yù)加載類的正常加載的同時(shí),提高嵌入式系統(tǒng)運(yùn)行的穩(wěn)定性,從而 提尚用戶體驗(yàn)。
[0010] 本發(fā)明提供了一種嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法,其特征在于,包括:
[0011] 在采用多線程并行加載嵌入式系統(tǒng)啟動(dòng)所需的預(yù)加載類前,檢測當(dāng)前的預(yù)加載類 是否為內(nèi)部類;
[0012] 若是,則解析出當(dāng)前的預(yù)加載類所屬的宿主類;并確定出該宿主類的加載線程;
[0013] 在所述宿主類加載完之后,通過所述加載線程加載所述當(dāng)前的預(yù)加載類。
[0014] 根據(jù)本發(fā)明的另一方面,還提供了一種嵌入式系統(tǒng)啟動(dòng)優(yōu)化裝置,包括:
[0015] 類檢測單元,用于在采用多線程并行加載嵌入式系統(tǒng)啟動(dòng)所需的預(yù)加載類前,檢 測當(dāng)前的預(yù)加載類是否為內(nèi)部類;
[0016] 類解析單元,用于若當(dāng)前的預(yù)加載類為內(nèi)部類,則解析出當(dāng)前的預(yù)加載類所屬的 宿主類;
[0017] 線程確定單元,用于若當(dāng)前的預(yù)加載類為內(nèi)部類,則確定當(dāng)前的預(yù)加載類所屬的 宿主類的加載線程;
[0018] 類加載單元,用于若當(dāng)前的預(yù)加載類為內(nèi)部類,則在當(dāng)前的預(yù)加載類所屬的宿主 類加載完之后,通過所述線程確定單元確定出的加載線程加載當(dāng)前的預(yù)加載類。
[0019] 本發(fā)明的方案中,在加載嵌入式系統(tǒng)啟動(dòng)所需的預(yù)加載類之前,對(duì)預(yù)加載類的類 型進(jìn)行檢測,若預(yù)加載類為內(nèi)部類,則需要在加載完該內(nèi)部類所屬的宿主類之后,通過該宿 主類的加載線程來加載其內(nèi)部類。這樣,可以保證宿主類與其內(nèi)部類由同一線程加載,且避 免出現(xiàn)宿主類未加載而內(nèi)部類先加載,致使內(nèi)部類因無加載基礎(chǔ)而加載失敗的異常情況, 從而防止因預(yù)加載類的加載異常導(dǎo)致嵌入式系統(tǒng)后續(xù)的運(yùn)行異常,提高了嵌入式系統(tǒng)運(yùn)行 的穩(wěn)定性。
[0020] 本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,這些將從下面的描述中變 得明顯,或通過本發(fā)明的實(shí)踐了解到。
【附圖說明】
[0021] 本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變得 明顯和容易理解,其中:
[0022] 圖1為本發(fā)明實(shí)施例的嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法的流程示意圖;
[0023] 圖2為本發(fā)明實(shí)施例的嵌入式系統(tǒng)啟動(dòng)優(yōu)化裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0024] 下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終 相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附 圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對(duì)本發(fā)明的限制。
[0025]本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式"一"、"一 個(gè)"、"所述"和"該"也可包括復(fù)數(shù)形式。應(yīng)該進(jìn)一步理解的是,本發(fā)明的說明書中使用的措 辭"包括"是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加 一個(gè)或多個(gè)其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。應(yīng)該理解,當(dāng)我們稱元 件被"連接"或"耦接"到另一元件時(shí),它可以直接連接或耦接到其他元件,或者也可以存在 中間元件。此外,這里使用的"連接"或"親接"可以包括無線連接或無線耦接。這里使用的措 辭"和/或"包括一個(gè)或更多個(gè)相關(guān)聯(lián)的列出項(xiàng)的全部或任一單元和全部組合。
[0026]本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(包括技術(shù)術(shù) 語和科學(xué)術(shù)語),具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng)該 理解的是,諸如通用字典中定義的那些術(shù)語,應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中的 意義一致的意義,并且除非像這里一樣被特定定義,否則不會(huì)用理想化或過于正式的含義 來解釋。
[0027]本技術(shù)領(lǐng)域技術(shù)人員可以理解,這里所使用的"終端"、"終端設(shè)備"既包括無線信 號(hào)接收器的設(shè)備,其僅具備無發(fā)射能力的無線信號(hào)接收器的設(shè)備,又包括接收和發(fā)射硬件 的設(shè)備,其具有能夠在雙向通信鏈路上,進(jìn)行雙向通信的接收和發(fā)射硬件的設(shè)備。這種設(shè)備 可以包括:蜂窩或其他通信設(shè)備,其具有單線路顯示器或多線路顯示器或沒有多線路顯示 器的蜂窩或其他通信設(shè)備;PCS(Personal Communications Service,個(gè)人通信系統(tǒng)),其可 以組合語音、數(shù)據(jù)處理、傳真和/或數(shù)據(jù)通信能力;PDA(Personal Digital Assistant,個(gè)人 數(shù)字助理),其可以包括射頻接收器、尋呼機(jī)、互聯(lián)網(wǎng)/內(nèi)聯(lián)網(wǎng)訪問、網(wǎng)絡(luò)瀏覽器、記事本、日 歷和/或GPS(Global Positioning System,全球定位系統(tǒng))接收器;常規(guī)膝上型和/或掌上 型計(jì)算機(jī)或其他設(shè)備,其具有和/或包括射頻接收器的常規(guī)膝上型和/或掌上型計(jì)算機(jī)或其 他設(shè)備。這里所使用的"終端"、"終端設(shè)備"可以是便攜式、可運(yùn)輸、安裝在交通工具(航空、 海運(yùn)和/或陸地)中的,或者適合于和/或配置為在本地運(yùn)行,和/或以分布形式,運(yùn)行在地球 和/或空間的任何其他位置運(yùn)行。這里所使用的"終端"、"終端設(shè)備"還可以是通信終端、上 網(wǎng)終端、音樂/視頻播放終端,例如可以是PDA、MID(Mobile Internet Device,移動(dòng)互聯(lián)網(wǎng) 設(shè)備)和/或具有音樂/視頻播放功能的移動(dòng)電話,也可以是智能電視、機(jī)頂盒等設(shè)備。
[0028]本發(fā)明的發(fā)明人發(fā)現(xiàn),現(xiàn)有智能電視的啟動(dòng)速度慢的主要原因在于:Zygote(用戶 進(jìn)程孵化器)創(chuàng)建后,采用單線程加載,即串行加載的方式來加載這些預(yù)加載類。事實(shí)上,嵌 入式系統(tǒng)所需加載的預(yù)加載類往往有數(shù)百上千,若以單任務(wù)循環(huán)順序加載嵌入式系統(tǒng)中所 有預(yù)加載類,不僅耗費(fèi)時(shí)間長;而且,對(duì)于多核CPU來說,加載過程中僅僅使用了一個(gè)內(nèi)核, 實(shí)際上造成了其他內(nèi)核的浪費(fèi)。而實(shí)際應(yīng)用中,Zygote加載完預(yù)加載類之后,System Server才能進(jìn)行后續(xù)的操作來完成嵌入式系統(tǒng)的啟動(dòng)。因此,預(yù)加載類的加載速度限制了 嵌入式系統(tǒng)的啟動(dòng)速度。
[0029] 故而本發(fā)明的發(fā)明人考慮,可以根據(jù)嵌入式系統(tǒng)CPU(Central Processing Unit, 中央處理器)的核數(shù),啟動(dòng)多線程;之后,采用多線程并行加載嵌入式系統(tǒng)所需要的預(yù)加載 類。這樣,以并行的方式加載預(yù)加載類,相比現(xiàn)有單線程加載的方式,可以提高預(yù)加載類的 加載速度,從而提高嵌入式系統(tǒng)的啟動(dòng)速度。
[0030]進(jìn)一步地,本發(fā)明的發(fā)明人發(fā)現(xiàn),嵌入式系統(tǒng)所需加載的預(yù)加載類中有些預(yù)加載 類存在內(nèi)部類(inner class)。實(shí)際應(yīng)用中,java語言中載入一個(gè)類時(shí),確定類的信息的標(biāo) 準(zhǔn)格式:
[0031 ] packagel[.package2···].classname$subclassname〇
[0032] 其中,classname為宿主類的名稱,subclassname為宿主類的內(nèi)部類的名稱。這樣, 系統(tǒng)會(huì)按照packagel/package2/ ·· /packageN/class,找到類及其內(nèi)部類,并加載到內(nèi)存 中。
[0033]實(shí)際應(yīng)用中,可以將嵌入式系統(tǒng)所需加載的預(yù)加載類劃分為三種:包括內(nèi)部類的 預(yù)加載類、作為內(nèi)部類而存在的預(yù)加載類、以及不包括內(nèi)部類且不作為內(nèi)部類而存在的預(yù) 加載類。為了便于描述,本文可以將包括內(nèi)部類的預(yù)加載類、以及不包括內(nèi)部類且不作為內(nèi) 部類而存在的預(yù)加載類,均稱為宿主類。也就是說,對(duì)于有些宿主類,其包括內(nèi)部類,如表1 所示,編號(hào)37-41的預(yù)加載類是編號(hào)36的預(yù)加載類的內(nèi)部類;編號(hào)36的預(yù)加載類為編號(hào)37-41的預(yù)加載類所屬的宿主類(host class)。而對(duì)于有些宿主類其不包括內(nèi)部類,比如,編號(hào) 34、35、42-44的預(yù)加載類為不包括內(nèi)部類的宿主類。
[0034]表1預(yù)加載類配置文件
[0037] 考慮到,實(shí)際應(yīng)用中,內(nèi)部類的加載會(huì)依賴其宿主類的加載,即必須在宿主類加載 完成后才能加載該宿主類的內(nèi)部類,否則,內(nèi)部類的加載會(huì)因?yàn)闊o加載基礎(chǔ)而加載失敗,導(dǎo) 致后續(xù)系統(tǒng)運(yùn)行發(fā)生異常。因此,若采用多線程并行加載預(yù)加載類,有可能會(huì)發(fā)生下面的情 況從而導(dǎo)致加載失敗:線程A正在開始加載宿主類X,但是沒有加載完成。這時(shí)線程B也開始 加載宿主類X的內(nèi)部類XI。這時(shí)就會(huì)發(fā)生加載異常,導(dǎo)致系統(tǒng)運(yùn)行異常。
[0038] 為了避免上述情況的發(fā)生,本發(fā)明的發(fā)明人考慮,在加載預(yù)加載類的之前,可以對(duì) 當(dāng)前的預(yù)加載類進(jìn)行檢測,判斷當(dāng)前的預(yù)加載類是否為內(nèi)部類,如果是,則確定其所屬宿主 類的線程,在該線程完成宿主類的加載之后,再來加載該內(nèi)部類,以此保證一個(gè)宿主類以及 該宿主類的所有內(nèi)部類都由一個(gè)線程加載,且按照先宿主后內(nèi)部的順序完成內(nèi)部類的正常 加載,從而保障系統(tǒng)的正常運(yùn)行。
[0039]下面將結(jié)合附圖來詳細(xì)說明本發(fā)明的技術(shù)方案。
[0040]實(shí)際應(yīng)用中,本發(fā)明提供的嵌入式系統(tǒng)的啟動(dòng)優(yōu)化方案中,在嵌入式系統(tǒng)啟動(dòng)的 初始階段,需要進(jìn)行系統(tǒng)上電、系統(tǒng)引導(dǎo)程序、啟動(dòng)內(nèi)核(Kernel)、以及創(chuàng)建初始化進(jìn)程 (Init)。之后,可以通過創(chuàng)建的初始化進(jìn)程來創(chuàng)建Zygote(孵化器)進(jìn)程。而且,通過初始化 進(jìn)程還可以創(chuàng)建Runtime(系統(tǒng)運(yùn)行所需軟件庫)、以及Daemon(守護(hù)進(jìn)程)。
[0041] Zygote進(jìn)程在創(chuàng)建之后,可以創(chuàng)建VM(Virtual Memory,虛擬存儲(chǔ)器),并且在創(chuàng)建 的VM啟動(dòng)時(shí)賦予各種參數(shù)。比如,一般情況下一個(gè)應(yīng)用程序加載的內(nèi)存不能超過16mb,因 此,通過Zygote進(jìn)程可以設(shè)置heapsize參數(shù)為16mb來。其中,heapsize參數(shù)表示單個(gè)進(jìn)程可 用的最大內(nèi)存。Zygote進(jìn)程創(chuàng)建并啟動(dòng)VM虛擬機(jī)之后,可以為java的類注冊(cè)JNI( Java Native Interface,Java本地接口)函數(shù),以便Zygote進(jìn)程能夠調(diào)用Java代碼。進(jìn)而加載嵌 入式系統(tǒng)所需的java類以及一些嵌入式系統(tǒng)資源。
[0042]實(shí)際應(yīng)用中,嵌入式系統(tǒng)所需的預(yù)加載類往往具有一千多個(gè),并且存在大量的加 載時(shí)間超過1250微秒的預(yù)加載類。若按照現(xiàn)有單線程加載這些預(yù)加載類,將會(huì)耗費(fèi)大量的 時(shí)間,嚴(yán)重影響嵌入式系統(tǒng)的啟動(dòng)時(shí)間。
[0043] 而本發(fā)明的發(fā)明人發(fā)現(xiàn),實(shí)際應(yīng)用中,隨著多核技術(shù)的發(fā)展,目前的智能終端可以 在一枚處理器中集成兩個(gè)或多個(gè)完整的計(jì)算引擎(內(nèi)核)。因此,本發(fā)明的發(fā)明人考慮可以 通過劃分任務(wù),使得線程應(yīng)用能夠充分利用多個(gè)執(zhí)行內(nèi)核,并可在特定的時(shí)間內(nèi)執(zhí)行更多 任務(wù)。因此,本發(fā)明的方案中,通過Zygote進(jìn)程加載預(yù)加載類之前,可先根據(jù)中央處理器的 核數(shù),啟動(dòng)多個(gè)線程來并行加載預(yù)加載類,提高系統(tǒng)啟動(dòng)速度。
[0044] 為了避免多線程并行加載時(shí)出現(xiàn)宿主類未加載而內(nèi)部類先加載,致使內(nèi)部類因無 加載基礎(chǔ)而加載失敗的異常情況,本發(fā)明提供了一種嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法,其具體流 程如圖1所示,可以包括如下步驟:
[0045] S101:在采用多線程并行加載嵌入式系統(tǒng)啟動(dòng)所需的預(yù)加載類前,檢測當(dāng)前的預(yù) 加載類是否為內(nèi)部類,若是,則執(zhí)行步驟S102;若否,執(zhí)行步驟S104。
[0046] 考慮到,實(shí)際應(yīng)用中,含有嵌入式系統(tǒng)所有預(yù)加載類的名單的預(yù)加載類配置文件 中,如表1所示,可以將預(yù)加載類逐行記錄;對(duì)于每個(gè)宿主類,其內(nèi)部類將在宿主類的記錄之 后連續(xù)記錄。其中,預(yù)加載類可按照預(yù)設(shè)的格式進(jìn)行記錄,比如,〈宿主類>$〈內(nèi)部類〉;或者 [任意多個(gè)字符Nl]$[任意多個(gè)字符N2],其中,N1表示宿主類,N2表示內(nèi)部類。對(duì)于內(nèi)部類, 其在內(nèi)部類位置上往往記錄了該內(nèi)部類的名稱,在宿主類位置上記錄了所屬宿主類的名 稱;而對(duì)于宿主類,其在內(nèi)部類位置上并沒有記錄,即在內(nèi)部類位置上對(duì)應(yīng)記錄的內(nèi)容為 空。
[0047] 因此,本發(fā)明實(shí)施例中,在采用多線程并行加載嵌入式系統(tǒng)啟動(dòng)所需的預(yù)加載類 前,可以針對(duì)當(dāng)前的預(yù)加載類,按照預(yù)設(shè)的解析格式,解析當(dāng)前的預(yù)加載類,以獲取當(dāng)前的 預(yù)加載類在內(nèi)部類位置上對(duì)應(yīng)記錄的內(nèi)容。
[0048] 繼而,檢測當(dāng)前的預(yù)加載類在內(nèi)部類位置上對(duì)應(yīng)記錄的內(nèi)容是否為空;若是,則確 定當(dāng)前的預(yù)加載類為宿主類,執(zhí)行步驟S104;否則,確定當(dāng)前的預(yù)加載類為內(nèi)部類,執(zhí)行步 驟S102。其中,預(yù)設(shè)的解析格式中包括宿主類位置和內(nèi)部類位置,宿主類位置與內(nèi)部類位置 之間可以設(shè)有間隔符。
[0049]例如,在嵌入式系統(tǒng)啟動(dòng)中,Zygote進(jìn)程可以按序讀取預(yù)加載類配置文件中的預(yù) 加載類N;按照〈宿主類>$〈內(nèi)部類〉的格式解析當(dāng)前待加載的預(yù)加載類N,檢測當(dāng)前的預(yù)加載 類N是否為內(nèi)部類。
[0050] 例如,〈宿主類>$〈內(nèi)部類〉的格式中,宿主類記錄為HC,內(nèi)部類記錄為1C,若檢測當(dāng) 前的預(yù)加載類N中,1C為空,則說明當(dāng)前的預(yù)加載類N不是內(nèi)部類;若檢測當(dāng)前的預(yù)加載類N 中,1C不為空,則說明當(dāng)前的預(yù)加載類N是內(nèi)部類。
[0051] 或者,將當(dāng)前的預(yù)加載類N與預(yù)設(shè)的格式[N1]$[N2]進(jìn)行匹配,如果與[N1]$[N2]匹 配成功,則該類為內(nèi)部類;否則,該類為宿主類。
[0052] 若確定當(dāng)前的預(yù)加載類N為宿主類,則執(zhí)行步驟S104;若確定當(dāng)前的預(yù)加載類N為 內(nèi)部類,則執(zhí)行步驟S102。
[0053] S102:若當(dāng)前的預(yù)加載類是內(nèi)部類,則解析出當(dāng)前的預(yù)加載類所屬的宿主類;并確 定出該宿主類的加載線程。
[0054] 本發(fā)明的方案采用多線程并行加載預(yù)加載類,為保證內(nèi)部類的加載存在加載基 礎(chǔ),可以讓宿主類與其內(nèi)部類由同一個(gè)線程來加載,且在該線程加載宿主類之后,才加載其 內(nèi)部類。
[0055] 因此,本發(fā)明實(shí)施例中,在確定當(dāng)前的預(yù)加載類為內(nèi)部類之后,需要確定其所屬宿 主類的加載線程,并將宿主類的加載線程作為當(dāng)前的預(yù)加載類的加載線程。
[0056] 具體地,若通過步驟S101檢測當(dāng)前的預(yù)加載類,確定當(dāng)前的預(yù)加載類是內(nèi)部類,則 可以按照預(yù)設(shè)的解析格式,解析當(dāng)前的預(yù)加載類,以獲取其在宿主類位置上對(duì)應(yīng)記錄的內(nèi) 容;將獲取的內(nèi)容確定為當(dāng)前的預(yù)加載類所屬的宿主類。
[0057] 接上例,〈宿主類>$〈內(nèi)部類〉的格式中,宿主類記錄為HC,內(nèi)部類記錄為1C,若檢測 當(dāng)前的預(yù)加載類N中,1C不為空,則可以解析獲取當(dāng)前的預(yù)加載類N中HC所對(duì)應(yīng)的內(nèi)容,并將 獲取的內(nèi)容確定為當(dāng)前的預(yù)加載類N所屬的宿主類。
[0058]實(shí)際應(yīng)用中,若預(yù)加載類配置文件嚴(yán)格按照要求,在記錄宿主類之后,緊接著記錄 宿主類的內(nèi)部類,則在確定當(dāng)前的預(yù)加載類之后,也可以從預(yù)加載類配置文件中確定上一 次檢測為宿主類的預(yù)加載類,作為當(dāng)前的預(yù)加載類所屬的宿主類。
[0059] 在確定出作為內(nèi)部類的當(dāng)前的預(yù)加載類所屬的宿主類之后,確定出宿主類的加載 線程。具體地,可以查找出當(dāng)前空閑的線程,并確定為該宿主類的加載線程;或者,將宿主類 所對(duì)應(yīng)的預(yù)設(shè)的線程確定為該宿主類的加載線程;或者,將當(dāng)前正加載宿主類的線程確定 為該宿主類的加載線程。
[0060] 其中,宿主類所對(duì)應(yīng)的預(yù)設(shè)的線程,可以是指在Zygote進(jìn)程加載預(yù)加載類之前預(yù) 先針對(duì)系統(tǒng)啟動(dòng)所需的宿主類進(jìn)行對(duì)應(yīng)設(shè)置的線程。
[0061] 考慮到,通過多線程來并行加載嵌入式系統(tǒng)所需的預(yù)加載類,將可能面臨預(yù)加載 類的分配問題,即預(yù)加載類由哪個(gè)進(jìn)程來執(zhí)行的問題。由于實(shí)際應(yīng)用中,嵌入式系統(tǒng)所需的 預(yù)加載類中存在一些相互依賴的預(yù)加載類。例如,預(yù)加載類A與預(yù)加載類B之間存在依賴關(guān) 系,即如果要加載預(yù)加載類A必須加載預(yù)加載類B。
[0062] 因此,為了避免預(yù)加載類之間的相互影響,在進(jìn)行加載之前,可以預(yù)先對(duì)預(yù)加載類 配置文件中的部分預(yù)加載類進(jìn)行分組,以使得群組中的預(yù)加載類與其它群組中的預(yù)加載類 互不依賴。具體地,在獲取中央處理器的核數(shù)之后,可以讀取預(yù)加載類配置文件,從中獲取 所有的宿主類;并根據(jù)獲取的核數(shù),將獲取的所有的宿主類劃分到相應(yīng)數(shù)量的群組中。其 中,群組中的預(yù)加載類與其它群組中的預(yù)加載類互不依賴。這樣,在嵌入式系統(tǒng)啟動(dòng)過程 中,可以根據(jù)中央處理器的核數(shù),啟動(dòng)相應(yīng)數(shù)量的線程,分別對(duì)應(yīng)不同的群組,用于加載所 對(duì)應(yīng)的群組中的預(yù)加載類。宿主類所對(duì)應(yīng)的預(yù)設(shè)的線程為宿主類所屬群組所對(duì)應(yīng)的線程。 [00 63] 其中,中央處理器CPU的核數(shù)可以通過讀取系統(tǒng)文件cat/proc/cpuinfo,過濾其中 的processor字段來獲取。例如,如果嵌入系統(tǒng)中有兩個(gè)核,則通過上述方法過濾過得到的 結(jié)果將為:
[0064] processor:0
[0065] processor:1
[0066] 例如,在中央處理器的核數(shù)具體為4個(gè)的情況下,可以將嵌入式系統(tǒng)的預(yù)加載類配 置文件中所有的宿主類劃分到4個(gè)群組中。這樣,后續(xù)在加載預(yù)加載類的過程中,可以通過4 個(gè)線程,并行加載各自對(duì)應(yīng)的群組中的預(yù)加載類,宿主類的加載線程為其所屬群組所對(duì)應(yīng) 的線程。
[0067] S103:在宿主類加載完之后,通過宿主類的加載線程加載當(dāng)前的預(yù)加載類。
[0068] 實(shí)際應(yīng)用中,含有嵌入式系統(tǒng)所有預(yù)加載類的名單的預(yù)加載類配置文件中每個(gè)宿 主類的內(nèi)部類連續(xù)記錄。因此,正常情況下會(huì)先讀取宿主類,后讀取該宿主類的內(nèi)部類。這 樣,在完成宿主類的加載之后才會(huì)進(jìn)行該宿主類的內(nèi)部類的讀取、檢測、加載等操作。然而, 由于內(nèi)部類的加載依賴其宿主類的加載,因此,若出現(xiàn)先讀取某一宿主類的內(nèi)部類,后讀取 該內(nèi)部類所屬宿主類的異常情況,在確定內(nèi)部類所屬宿主類的加載線程之后,需要等待由 該線程加載宿主類結(jié)束之后,才能加載該內(nèi)部類,以避免系統(tǒng)運(yùn)行發(fā)生異常。
[0069]具體地,為了保證內(nèi)部類的加載存在加載基礎(chǔ),在通過步驟S102確定出當(dāng)前的預(yù) 加載類所屬宿主類,以及宿主類的加載線程之后,可以檢測宿主類的加載線程是否已經(jīng)完 成宿主類的加載,在宿主類加載完之后,通過該加載線程加載當(dāng)前的預(yù)加載類宿主類的內(nèi) 部類,即宿主類的內(nèi)部類。
[0070]實(shí)際應(yīng)用中,完成當(dāng)前的預(yù)加載類的加載之后,可以讀取預(yù)加載類配置文件中的 下一個(gè)待加載的預(yù)加載類,執(zhí)行步驟S101;若當(dāng)前的預(yù)加載類為預(yù)加載類配置文件中最后 一個(gè)預(yù)加載類,則可以通過系統(tǒng)服務(wù)進(jìn)程System Server的創(chuàng)建、應(yīng)用啟動(dòng)器Launcher的啟 動(dòng)等操作,來完成嵌入式系統(tǒng)的啟動(dòng)。
[0071] S104:若待加載的預(yù)加載類不是內(nèi)部類,則確定當(dāng)前的預(yù)加載類為宿主類,確定出 該宿主類的加載線程,通過確定出的加載線程加載當(dāng)前的預(yù)加載類。
[0072] 本發(fā)明實(shí)施例中,若通過步驟S101檢測當(dāng)前的預(yù)加載類,確定當(dāng)前的預(yù)加載類不 是內(nèi)部類,則說明當(dāng)前的預(yù)加載類為包括內(nèi)部類的宿主類,或者不包括內(nèi)部類且不作為內(nèi) 部類存在的預(yù)加載類。本文中,可以將包括內(nèi)部類的預(yù)加載類、以及不包括內(nèi)部類且不作為 內(nèi)部類而存在的預(yù)加載類,均稱為宿主類。因此,本文中,若確定當(dāng)前的預(yù)加載類不是內(nèi)部 類,則可以確定當(dāng)前的預(yù)加載類為宿主類。
[0073] 為了完成嵌入式系統(tǒng)的啟動(dòng),在確定當(dāng)前的預(yù)加載類為宿主類之后,可以繼而確 定宿主類的加載線程。具體地,可以查找出當(dāng)前空閑的線程,并確定為該宿主類的加載線 程;或者,將宿主類所對(duì)應(yīng)的預(yù)設(shè)的線程確定為該宿主類的加載線程;或者,將當(dāng)前正加載 宿主類的線程確定為該宿主類的加載線程。
[0074]其中,宿主類所對(duì)應(yīng)的預(yù)設(shè)的線程,可以是指在Zygote進(jìn)程加載預(yù)加載類之前預(yù) 先針對(duì)系統(tǒng)啟動(dòng)所需的宿主類進(jìn)行對(duì)應(yīng)設(shè)置的線程。具體地,根據(jù)中央處理器的核數(shù),將所 有的宿主類劃分到相應(yīng)數(shù)量的群組中。其中,群組中的預(yù)加載類與其它群組中的預(yù)加載類 互不依賴。這樣,在嵌入式系統(tǒng)啟動(dòng)過程中,可根據(jù)中央處理器的核數(shù),啟動(dòng)相應(yīng)數(shù)量的線 程,分別對(duì)應(yīng)不同的群組,用于加載所對(duì)應(yīng)的群組中的預(yù)加載類。因此,可以直接查找出該 預(yù)加載類所在的群組,將查找出的群組所對(duì)應(yīng)的線程作為當(dāng)前的預(yù)加載類的加載線程;并 通過確定出的加載線程加載當(dāng)前的預(yù)加載類。
[0075]實(shí)際應(yīng)用中,完成當(dāng)前的預(yù)加載類的加載之后,可以讀取預(yù)加載類配置文件中的 下一個(gè)待加載的預(yù)加載類,執(zhí)行步驟S101。若當(dāng)前的預(yù)加載類為預(yù)加載類配置文件中最后 一個(gè)預(yù)加載類,則可以通過系統(tǒng)服務(wù)進(jìn)程System Server的創(chuàng)建、應(yīng)用啟動(dòng)器Launcher的啟 動(dòng)等操作,來完成嵌入式系統(tǒng)的啟動(dòng)。
[0076] 本發(fā)明實(shí)施例中,通過步驟S103和/或步驟S104,加載完嵌入系統(tǒng)所需的所有預(yù)加 載類之后,可以進(jìn)一步地通過Zygote進(jìn)程創(chuàng)建嵌入式系統(tǒng)的系統(tǒng)服務(wù)System Server進(jìn)程。 之后,由創(chuàng)建的System Server進(jìn)程所啟動(dòng)的Activity Manager Service(活動(dòng)管理器服 務(wù))來啟動(dòng)嵌入式系統(tǒng)的Launcher(應(yīng)用啟動(dòng)器)。
[0077] 實(shí)際應(yīng)用中,Activity Manager Service和Package Manager Service(應(yīng)用程序 管理服務(wù))一樣,都是在嵌入式系統(tǒng)啟動(dòng)時(shí)由System Server(系統(tǒng)服務(wù))進(jìn)程啟動(dòng)的。
[0078] 具體地,System Server進(jìn)程首先啟動(dòng)Package Manager Service,并由Package Manager Service來負(fù)責(zé)安裝嵌入式系統(tǒng)的應(yīng)用程序:Package Manager Service掃描嵌入 式系統(tǒng)中特定的目錄,從中找出應(yīng)用程序文件(比如,以Apk為后綴的文件);然后,Package Manager Service對(duì)查找出的應(yīng)用程序文件進(jìn)行解析,得到應(yīng)用程序的相關(guān)信息;基于得到 的應(yīng)用程序的相關(guān)信息,完成應(yīng)用程序的安裝過程。
[0079] 嵌入式系統(tǒng)中的應(yīng)用程序安裝好了以后,System Server進(jìn)程接下來就要通過 Activity Manager Service來啟動(dòng)應(yīng)用程序Launcher了。進(jìn)而,Launcher在啟動(dòng)的時(shí)候可 以通過Package Manager Service把嵌入式系統(tǒng)中已經(jīng)安裝好的應(yīng)用程序以快捷圖標(biāo)的形 式展示在智能終端的桌面上,就完成了嵌入式系統(tǒng)的啟動(dòng),這樣用戶就可以使用這些應(yīng)用 程序了。
[0080] 基于上述提供的嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法,本發(fā)明還提供了一種嵌入式系統(tǒng)啟動(dòng) 優(yōu)化裝置,如圖2所示,包括:類檢測單元201、類解析單元202、線程確定單元203、類加載單 元204。
[0081] 其中,類檢測單元201用于在采用多線程并行加載嵌入式系統(tǒng)啟動(dòng)所需的預(yù)加載 類前,檢測當(dāng)前的預(yù)加載類是否為內(nèi)部類。
[0082] 具體地,類檢測單元201可以按照預(yù)設(shè)的解析格式,解析當(dāng)前的預(yù)加載類,以獲取 其在內(nèi)部類位置上對(duì)應(yīng)記錄的內(nèi)容;檢測當(dāng)前的預(yù)加載類在內(nèi)部類位置上對(duì)應(yīng)記錄的內(nèi)容 是否為空;若是,則確定當(dāng)前的預(yù)加載類為宿主類;否則,確定當(dāng)前的預(yù)加載類是內(nèi)部類。 [0083]類解析單元202用于若當(dāng)前的預(yù)加載類為內(nèi)部類,則解析出當(dāng)前的預(yù)加載類所屬 的宿主類。
[0084] 具體地,若當(dāng)前的預(yù)加載類為內(nèi)部類,則類解析單元202可以按照預(yù)設(shè)的解析格 式,解析當(dāng)前的預(yù)加載類,以獲取其在宿主類位置上對(duì)應(yīng)記錄的內(nèi)容;將獲取的內(nèi)容確定為 當(dāng)前的預(yù)加載類所屬的宿主類。
[0085] 線程確定單元203用于若當(dāng)前的預(yù)加載類為內(nèi)部類,則確定當(dāng)前的預(yù)加載類所屬 的宿主類的加載線程。
[0086] 具體地,線程確定單元具體用于查找出當(dāng)前空閑的線程,并確定為宿主類的加載 線程;或?qū)⑺拗黝愃鶎?duì)應(yīng)的預(yù)設(shè)的線程確定為宿主類的加載線程;或?qū)?dāng)前加載宿主類的 線程確定為宿主類的加載線程。
[0087] 類加載單元204用于若當(dāng)前的預(yù)加載類為內(nèi)部類,則在當(dāng)前的預(yù)加載類所屬的宿 主類加載完之后,通過線程確定單元203確定出的加載線程加載當(dāng)前的預(yù)加載類。
[0088]進(jìn)一步地,線程確定單元203還用于若當(dāng)前的預(yù)加載類為宿主類,則確定出該宿主 類的加載線程。相應(yīng)地,類加載單元204還用于確定當(dāng)前的預(yù)加載類為宿主類時(shí),通過線程 確定單元203確定出的加載線程加載當(dāng)前的預(yù)加載類。
[0089] 本發(fā)明實(shí)施例中,嵌入式系統(tǒng)啟動(dòng)優(yōu)化裝置中的各個(gè)單元的具體功能實(shí)現(xiàn)可以參 考上述嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法中各個(gè)步驟的具體實(shí)現(xiàn),在此不再贅述。
[0090] 為減少預(yù)加載類的加載時(shí)間,提高嵌入式系統(tǒng)的啟動(dòng)速度,相比現(xiàn)有多線程并行 加載方案,本發(fā)明的方案中,在采用采用多線程并行加載嵌入式系統(tǒng)啟動(dòng)所需的預(yù)加載類 前,通過預(yù)加載類的檢測和內(nèi)部類所屬宿主類的加載線程的確定,保證宿主類與其內(nèi)部類 由同一線程加載,且先加載宿主類后加載內(nèi)部類,避免了內(nèi)部類的加載無加載基礎(chǔ)而出現(xiàn) 加載失敗的異常情況,從而保障系統(tǒng)后續(xù)的正常運(yùn)行,提高了系統(tǒng)運(yùn)行的穩(wěn)定性。
[0091] 本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明包括涉及用于執(zhí)行本申請(qǐng)中所述操作中的 一項(xiàng)或多項(xiàng)的設(shè)備。這些設(shè)備可以為所需的目的而專門設(shè)計(jì)和制造,或者也可以包括通用 計(jì)算機(jī)中的已知設(shè)備。這些設(shè)備具有存儲(chǔ)在其內(nèi)的計(jì)算機(jī)程序,這些計(jì)算機(jī)程序選擇性地 激活或重構(gòu)。這樣的計(jì)算機(jī)程序可以被存儲(chǔ)在設(shè)備(例如,計(jì)算機(jī))可讀介質(zhì)中或者存儲(chǔ)在 適于存儲(chǔ)電子指令并分別耦聯(lián)到總線的任何類型的介質(zhì)中,所述計(jì)算機(jī)可讀介質(zhì)包括但不 限于任何類型的盤(包括軟盤、硬盤、光盤、CD-ROM、和磁光盤)、R0M( Read-Only Memory,只 讀存儲(chǔ)器)、RAM(Random Access Memory,隨即存儲(chǔ)器)、EPROM(Erasable Programmable Read-Only Memory,可擦寫可編程只讀存儲(chǔ)器)、EEPR0M(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲(chǔ)器)、閃存、磁性卡片或光線卡 片。也就是,可讀介質(zhì)包括由設(shè)備(例如,計(jì)算機(jī))以能夠讀的形式存儲(chǔ)或傳輸信息的任何介 質(zhì)。
[0092] 本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以用計(jì)算機(jī)程序指令來實(shí)現(xiàn)這些結(jié)構(gòu)圖和/或 框圖和/或流圖中的每個(gè)框以及這些結(jié)構(gòu)圖和/或框圖和/或流圖中的框的組合。本技術(shù)領(lǐng) 域技術(shù)人員可以理解,可以將這些計(jì)算機(jī)程序指令提供給通用計(jì)算機(jī)、專業(yè)計(jì)算機(jī)或其他 可編程數(shù)據(jù)處理方法的處理器來實(shí)現(xiàn),從而通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理方法的處理 器來執(zhí)行本發(fā)明公開的結(jié)構(gòu)圖和/或框圖和/或流圖的框或多個(gè)框中指定的方案。
[0093]本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明中已經(jīng)討論過的各種操作、方法、流程中的 步驟、措施、方案可以被交替、更改、組合或刪除。進(jìn)一步地,具有本發(fā)明中已經(jīng)討論過的各 種操作、方法、流程中的其他步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。 進(jìn)一步地,現(xiàn)有技術(shù)中的具有與本發(fā)明中公開的各種操作、方法、流程中的步驟、措施、方案 也可以被交替、更改、重排、分解、組合或刪除。
[0094]以上所述僅是本發(fā)明的部分實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人 員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng) 視為本發(fā)明的保護(hù)范圍。
【主權(quán)項(xiàng)】
1. 一種嵌入式系統(tǒng)啟動(dòng)優(yōu)化方法,其特征在于,包括: 在采用多線程并行加載嵌入式系統(tǒng)啟動(dòng)所需的預(yù)加載類前,檢測當(dāng)前的預(yù)加載類是否 為內(nèi)部類; 若是,則解析出當(dāng)前的預(yù)加載類所屬的宿主類;并確定出該宿主類的加載線程; 在所述宿主類加載完之后,通過所述加載線程加載所述當(dāng)前的預(yù)加載類。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述檢測當(dāng)前的預(yù)加載類是否為內(nèi)部類 后,還包括: 若否,則確定當(dāng)前的預(yù)加載類為宿主類,確定出所述宿主類的加載線程,通過所述加載 線程加載所述當(dāng)前的預(yù)加載類。3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述檢測當(dāng)前的預(yù)加載類是否為內(nèi)部 類,具體包括: 按照預(yù)設(shè)的解析格式,解析當(dāng)前的預(yù)加載類,以獲取其在內(nèi)部類位置上對(duì)應(yīng)記錄的內(nèi) 容; 檢測當(dāng)前的預(yù)加載類在內(nèi)部類位置上對(duì)應(yīng)記錄的內(nèi)容是否為空; 若是,則確定當(dāng)前的預(yù)加載類為宿主類;否則,確定當(dāng)前的預(yù)加載類為內(nèi)部類。4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述解析出當(dāng)前的預(yù)加載類所屬的宿主 類,具體包括: 按照預(yù)設(shè)的解析格式,解析當(dāng)前的預(yù)加載類,以獲取其在宿主類位置上對(duì)應(yīng)記錄的內(nèi) 容; 將獲取的內(nèi)容確定為當(dāng)前的預(yù)加載類所屬的宿主類。5. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述確定出該宿主類的加載線程,具體 包括: 查找出當(dāng)前空閑的線程,并確定為該宿主類的加載線程;或 將宿主類所對(duì)應(yīng)的預(yù)設(shè)的線程確定為該宿主類的加載線程; 或?qū)?dāng)前正加載宿主類的線程確定為該宿主類的加載線程。6. -種嵌入式系統(tǒng)啟動(dòng)優(yōu)化裝置,其特征在于,包括: 類檢測單元,用于在采用多線程并行加載嵌入式系統(tǒng)啟動(dòng)所需的預(yù)加載類前,檢測當(dāng) 前的預(yù)加載類是否為內(nèi)部類; 類解析單元,用于若當(dāng)前的預(yù)加載類為內(nèi)部類,則解析出當(dāng)前的預(yù)加載類所屬的宿主 類; 線程確定單元,用于若當(dāng)前的預(yù)加載類為內(nèi)部類,則確定當(dāng)前的預(yù)加載類所屬的宿主 類的加載線程; 類加載單元,用于若當(dāng)前的預(yù)加載類為內(nèi)部類,則在當(dāng)前的預(yù)加載類所屬的宿主類加 載完之后,通過所述線程確定單元確定出的加載線程加載當(dāng)前的預(yù)加載類。7. 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述線程確定單元還用于若當(dāng)前的預(yù)加載 類為宿主類,則確定出該宿主類的加載線程;以及 所述類加載單元還用于確定當(dāng)前的預(yù)加載類為宿主類時(shí),通過所述線程確定單元確定 出的加載線程加載當(dāng)前的預(yù)加載類。8. 根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述類檢測單元具體用于按照預(yù)設(shè)的 解析格式,解析當(dāng)前的預(yù)加載類,以獲取其在內(nèi)部類位置上對(duì)應(yīng)記錄的內(nèi)容;檢測當(dāng)前的預(yù) 加載類在內(nèi)部類位置上對(duì)應(yīng)記錄的內(nèi)容是否為空;若是,則確定當(dāng)前的預(yù)加載類為宿主類; 否則,確定當(dāng)前的預(yù)加載類是內(nèi)部類。9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述類解析單元具體用于若當(dāng)前的預(yù)加載 類為內(nèi)部類,則按照預(yù)設(shè)的解析格式,解析當(dāng)前的預(yù)加載類,以獲取其在宿主類位置上對(duì)應(yīng) 記錄的內(nèi)容;將獲取的內(nèi)容確定為當(dāng)前的預(yù)加載類所屬的宿主類。10. 根據(jù)權(quán)利要求6或7所述的裝置,其特征在于, 所述線程確定單元具體用于查找出當(dāng)前空閑的線程,并確定為宿主類的加載線程;或 將宿主類所對(duì)應(yīng)的預(yù)設(shè)的線程確定為宿主類的加載線程;或?qū)?dāng)前加載宿主類的線程確定 為宿主類的加載線程。
【文檔編號(hào)】G06F9/445GK106095499SQ201610399093
【公開日】2016年11月9日
【申請(qǐng)日】2016年6月7日
【發(fā)明人】臧曉華, 王新魯
【申請(qǐng)人】青島海信電器股份有限公司