Android操作系統(tǒng)的快速啟動方法
【專利摘要】本發(fā)明提供了一種Android操作系統(tǒng)的快速啟動方法,包括:在啟動時,應(yīng)用程序管理服務(wù)僅掃描Android操作系統(tǒng)自帶的應(yīng)用的最小子集,該最小子集的應(yīng)用以保證所述Android操作系統(tǒng)正常開機啟動桌面啟動器為標準;在所述Android操作系統(tǒng)完成啟動后,所述應(yīng)用程序管理服務(wù)掃描所述最小子集的應(yīng)用之外的其他應(yīng)用。本發(fā)明能夠顯著縮短Android操作系統(tǒng)的啟動時間,減少開機時間。
【專利說明】Android操作系統(tǒng)的快速啟動方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種Android操作系統(tǒng)的快速啟動方法。
【背景技術(shù)】
[0002] Android操作系統(tǒng)是一種基于Unux操作系統(tǒng)的自由及開放源代碼的操作系統(tǒng), 由Google^公司和開放手機聯(lián)盟領(lǐng)導(dǎo)及開發(fā),主要用于移動設(shè)備,如智能手機和平板電腦。 Android操作系統(tǒng)的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,Andr〇id 操作系統(tǒng)分為四個層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和 Linux內(nèi)核層。 ^〇〇3] Android操作系統(tǒng)具有良好的開發(fā)性,用戶可以從應(yīng)用商店或者其他途徑下載和 安裝Android應(yīng)用,Android應(yīng)用通常以APK文件提供。當(dāng)用戶安裝的應(yīng)用很多時,會造 成系統(tǒng)開機啟動時間很長。
[0004]現(xiàn)在Android操作系統(tǒng)的系統(tǒng)啟動過程按先后包括:引導(dǎo)程序(b〇〇tl〇ader), linux內(nèi)核,本地(native)服務(wù),dalvik虛擬機,Android服務(wù)以及應(yīng)用程序。
[0005] Android操作系統(tǒng)在啟動的過程中,會啟動應(yīng)用程序管理服務(wù) (PackageManagerService),該應(yīng)用程序管理服務(wù)負責(zé)掃描系統(tǒng)中特定的目錄,找到其中的 應(yīng)用程序文件,即以APK為后綴的文件,然后對這些文件進行解析,得到應(yīng)用程序的相關(guān)信 息,完成應(yīng)用程序的安裝過程,當(dāng)安裝的APK文件越多時,所需要的時間越多,極大影響了 Android操作系統(tǒng)的啟動時間,從而影響安裝有 Andr〇丨d操作系統(tǒng)的設(shè)備的開機時間。
【發(fā)明內(nèi)容】
[0006]本發(fā)明要解決的技術(shù)問題是提供一種Andr〇id操作系統(tǒng)的快速啟動方法,能夠顯 著縮短Android操作系統(tǒng)的啟動時間。
[0007]為解決上述技術(shù)問題,本發(fā)明提供了一種Android操作系統(tǒng)的快速啟動方法,包 括: '
[0008]在啟動時,應(yīng)用程序管理服務(wù)僅掃描Android操作系統(tǒng)自帶的應(yīng)用的最小子集 該最小子集的應(yīng)用以保證所述Android操作系統(tǒng)正常開機啟動桌面啟動器為標準; ,
[0009]在所述Android操作系統(tǒng)完成啟動后,所述應(yīng)用程序管理服務(wù)掃描所述最小 的應(yīng)用之外的其他應(yīng)用。 $
[0010]根據(jù)本發(fā)明的一個實施例,在啟動時,應(yīng)用程序管理服務(wù)僅掃描Android操作 統(tǒng)自帶的應(yīng)用的最小子集包括: 糸 器集參I該最小子集^數(shù)定義所述Andr°id操傾纟紐常開機啟動桌
[00!2]啟動所述應(yīng)用程序管理服務(wù)時獲取該最小子集參數(shù);
[0013]所述應(yīng)用程序管理服務(wù)按照該最小子集參數(shù)的指示掃描相應(yīng)的應(yīng)用
[0014]根據(jù)本發(fā)明的一個實施例,在所述最小子集的應(yīng)用掃描完成后,發(fā)出第一階斤戶 動元成福_代原生Andmid操作系統(tǒng)的啟動完成消息。 ,在所述最小子集的應(yīng)用之外的其他刪掃描完成后, 發(fā)出所述原生Android操作系統(tǒng)的啟動完成消息。 的-個實施例,在所述最小子集的應(yīng)用掃描完成后,還發(fā)出延遲掃描 治息,以?Η不4束所述應(yīng)用程序管理服務(wù)的掃描過程,所麵遲掃描消息包含延遲時間;在 到達所麵遲時間時,臟應(yīng)用程序管理服務(wù)開始掃描所麵小子集的應(yīng)用之外的其他應(yīng) 用。 _7]根據(jù)本發(fā)明的-個實施例,所述最小子集麵以代碼方式定義或者以肌 式配置。
[0018]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點:
[0019]本發(fā)明實施例的Android操作系統(tǒng)的快速啟動方法中,將應(yīng)用程序管理服務(wù)對應(yīng) 腿掃描雖分涵個隨,在啟耐程巾觸描系統(tǒng)自刪部分刪,保證系統(tǒng)正常開 機啟動桌面啟動器(Launcher);在系統(tǒng)啟動完成后,在掃描其他應(yīng)用,從而顯著縮短了啟動 時間。
【專利附圖】
【附圖說明】
[0020]圖1是本發(fā)明實施例的Android操作系統(tǒng)的快速啟動方法的流程示意圖。
【具體實施方式】
[0021 ] 發(fā)明人對應(yīng)用程序管理服務(wù)(PackageManagerService)的啟動過程進行了分析, 其啟動時通過靜態(tài)方法main ()來實現(xiàn)的,也即通過PackageManagerService構(gòu)造函數(shù)來返 回一個IPackageManager的接口實現(xiàn)。應(yīng)用程序管理服務(wù)的構(gòu)造函數(shù)流程如下:
[0022]步驟1 :進行~'些成員變量的初始化,比如mContext,mFactoryTest, mMetrics, mSettings等。另外,最重要的是初始化變量mlnstaller,變量mlnstaller建立與守護進 程installd的套接字(socket)連接,守護進程installd主要用于安裝(install)、移除 (remove)、優(yōu)化(dexopt)的底層實現(xiàn)。
[0023] 步驟2 :建立PackageHandler消息循環(huán),用于處理外部的apk文件安裝請求消息, 如adb install, packageinstaller安裝apk文件時會發(fā)送消息。
[0024] 以上步驟1和步驟2總耗時大約為15ms左右。
[0025] 步驟 3,解析 /system/etc/permission 下的 xml 文件(framework/base/data/ etc/),包括platform, xml和系統(tǒng)支持的各種硬件模塊的特性(feature)。步驟3耗時25ms 左右。
[0026] 步驟4 :解析/data/system/packages, xml,這個文件是在解析apk文件時由 writeLPO創(chuàng)建的,里面記錄有系統(tǒng)的許可(permissions),以及每個apk的name, codePat h, flags, ts, version, uesrid 等f旨息。步驟 4 耗時大約 130ms 左右。
[0027] 步驟 5 :檢查 BootClassPath,mSharedLibraries 及 /system/framework 下的 jar 是否需要dexopt,需要的則通過dexopt進行優(yōu)化。步驟5耗時大約30ms左右。
[0028] 步驟 6 :分別對 /system/framework,/system/app,/data/app,/data/ app-private目錄下的apk進行解析,并啟動AppDirObserver對上述目錄進行監(jiān)測。步驟 6耗時棚apk的數(shù)量多少變化,目前安裝5個常見應(yīng)用,掃描時間在Ss左右,如果安裝 i5 個apk文件,時間達到25s左右,應(yīng)用越多耗時越長。
[0029]步驟7 :將解析的每個apk的信息保存到packages.-和喊聯(lián).丄以文件中。 步驟7耗時大約70ms左右。
[0030]從以上分析可知,Android操作系統(tǒng)的啟動時間主要由步驟6占用。因此,本發(fā)明 實施例對朗程序髓服務(wù)據(jù)朗的聰作了艦,餘親程巾僅據(jù)·自帶的部 分應(yīng)用,在系統(tǒng)啟動完,翻賊他朗,從觀著賴了啟動雌_間,加快了啟 動速度。
[0031 ]下面結(jié)合具體實施例和附圖對本發(fā)明作進一步說明,但不應(yīng)以此限制本發(fā)明的保 護范圍。
[0032]參考圖丨,本實施例中的Android操作系統(tǒng)的快速啟動方法包括如下步驟:
[j033]、步驟S11,在啟動時,應(yīng)用程序管理服務(wù)僅掃描Andr〇ic^#作系統(tǒng)自帶的應(yīng)用的 最小子集,該最小子集的應(yīng)用以保證所述Android操作系統(tǒng)正常開機啟動桌面啟動器為標 準;
[0034]步驟S12,在所述Android操作系統(tǒng)完成啟動后,所述應(yīng)用程序管理服務(wù)掃描所述 最小子集的應(yīng)用之外的其他應(yīng)用。
[0035]其中,步驟S11中Android操作系統(tǒng)自帶的應(yīng)用的最小子集是以不影響正常啟動 桌面啟動器為標準的,也就是在僅掃描該最小子集內(nèi)的應(yīng)用時,可以正常啟動至桌面啟動 器啟動。
[0036] 步驟S12中,在Android操作系統(tǒng)完成啟動后,應(yīng)用程序管理服務(wù)繼續(xù)掃描該最小 子集之外的其他應(yīng)用,以使各個應(yīng)用都能正常使用。
[0037] 進一步而言,可以首先確定第一階段需要掃描的應(yīng)用,也就是在Android操 作系統(tǒng)啟動過程中需要掃描的應(yīng)用。此類應(yīng)用主要包括系統(tǒng)級別的服* (service)、 提供方(provider)以及和桌面啟動器(launcher)相關(guān)的應(yīng)用,以能夠保證桌面啟動 器(launcher)正常啟動為標準。具體而言,可以通過設(shè)定最小子集參數(shù)來實現(xiàn)此類應(yīng) 用的指定,例如可以定義miniSystem數(shù)組,該數(shù)組中包含了第一階段所要掃描的應(yīng)用, miniSystem數(shù)組可以采用代碼方式定義,也可以采用χηι1文件的方式配置,但并不限于此。 [00 38]之后,啟動應(yīng)用程序管理服務(wù)(PackageManagerService)時,獲取miniSystem數(shù) 組,僅掃描system/app下miniSystem數(shù)組里面有定義的應(yīng)用。
[0039]在一非限制性的例子中,實現(xiàn)的偽代碼如下:
[0040] private void scanMinSystem()( Sti'ing[] files = systemFirstApps;
[0041] int i; 細 議lss.length; i開){ File file =ug;w File(dir, files[i]); PaekageParser.Package pkg= scanPackageLI(file, iags|PackageParser.PARSE_MUST_BB_APk scanMode ^ currentTime); }
[0042]在應(yīng)用程序管理服務(wù)完成第一階段的掃描過程后,可以發(fā)出第一階段啟動完 成消息FIRST_B00T_C0MPLETED,以取代原生Andr〇id操作系統(tǒng)的啟動完成消息Β00Τ_ COMPLETED。進一步而言,第一階段啟動完成消息 FIRST_B00T_C0MPLETED是新定義的,在第 一階段掃描完成后,發(fā)出· intent, action. FIRST_B00T_C0MPLETED,以替代原先的啟動完成 消息 B00T_C0MPLETED。
[0043]在第一階段掃描完成后,可以發(fā)送延遲掃描消息,結(jié)束應(yīng)用程序管理服務(wù)的啟動, 繼續(xù)Android操作系統(tǒng)的其他開機啟動流程,此時加載啟動的內(nèi)容、次序與現(xiàn)有技術(shù)相同, 這里不再贅述。
[0044]在一非限制性的例子中,具體實現(xiàn)的偽代碼如下:
[0045] void scieduleDelayScan ^ppsLoqkedO | if (!inHandler.hasMessages(MSG_DELAYSCAN)) { mHandler.sendEmptyMessageDelayed(MSG_DELAYSCAN,
[0046] 延遲掃描消息中可以包含延遲時間,在到達該延遲時間時,可以進行第二階段的 掃描,用于掃描上述最小子集之外的其他應(yīng)用。進一步而言,可以掃描system/app,data/ app下不在miniSystem數(shù)組下的應(yīng)用,并通知系統(tǒng)其他相關(guān)服務(wù),使得應(yīng)用能夠正常展示 并供用戶使用。
[0047] 在一非限制性的例子中,具體實現(xiàn)的偽代碼如下:
[0048] ___0/0 ^ void doHandleMessage(Message msg) { switch (msg.what) { case MSG_DELAYSCAN: scanAUSystemQ; scanDataApk〇: } }:
[0049]^第二階段的掃描完成之后,可以發(fā)出原生Android操作系統(tǒng)的啟動& 體而 g可以發(fā)出 android, intent, action· BOOT_COMPLETED。換言之,常規(guī)的^牛、''.、 操作系統(tǒng)中,在啟動階段應(yīng)用管麵務(wù)完成全部掃描時發(fā)出該啟動完成消 COMPLETED,而在本實施例中則改為啟動完成后并且應(yīng)用程序管理服務(wù)完成第二階段掃g 后再發(fā)出該啟動完成消息BOOT_COMPLETED,而在啟動過程中完成第一階段掃描^發(fā)出的是 自定義的第一階段啟動完成消息FIRST_B00T_C0MPLETED。
[0050]按照上述方案,在采用IMX53平臺的實例中,應(yīng)用程序管理服務(wù)的啟動時間可以 固定在Is以內(nèi),大大縮短了開機時間。
[0051]本實施例的方案可以應(yīng)用于基于Android操作系統(tǒng)的車載設(shè)備、手機、平板電腦 等多種場景。
[0052]本發(fā)明雖然以較佳實施例公開如上,但其并不是用來限定本發(fā)明,任何本領(lǐng)域技 術(shù)人員在不脫離本發(fā)明的精神和范圍內(nèi),都可以做出可能的變動和修改,因此本發(fā)明的保 護范圍應(yīng)當(dāng)以本發(fā)明權(quán)利要求所界定的范圍為準。
【權(quán)利要求】
1. 一種Android操作系統(tǒng)的快速啟動方法,其特征在于,包括: 在啟動時,應(yīng)用程序管理服務(wù)僅掃描Android操作系統(tǒng)自帶的應(yīng)用的最小子集,該最 小子集的應(yīng)用以保證所述Android操作系統(tǒng)正常開機啟動桌面啟動器為標準; 在所述Android操作系統(tǒng)完成啟動后,所述應(yīng)用程序管理服務(wù)掃描所述最小子集的應(yīng) 用之外的其他應(yīng)用。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在啟動時,應(yīng)用程序管理服務(wù)僅掃描 Android操作系統(tǒng)自帶的應(yīng)用的最小子集包括: 設(shè)定最小子集參數(shù),該最小子集參數(shù)定義所述Android操作系統(tǒng)正常開機啟動桌面啟 動器的最小子集; 啟動所述應(yīng)用程序管理服務(wù)時獲取該最小子集參數(shù); 所述應(yīng)用程序管理服務(wù)按照該最小子集參數(shù)的指示掃描相應(yīng)的應(yīng)用。
3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,在所述最小子集的應(yīng)用掃描完成后, 發(fā)出第一階段啟動完成消息以替代原生Android操作系統(tǒng)的啟動完成消息。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,在所述最小子集的應(yīng)用之外的其他應(yīng)用 掃描完成后,發(fā)出所述原生Android丨呆作系統(tǒng)的啟動完成消息。
5. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,在所述最小子集的應(yīng)用掃描完成后, 還發(fā)出延遲掃描消息,以指示結(jié)束所述應(yīng)用程序管理服務(wù)的掃描過程,所述延遲掃描消息 包含延遲時間;在到達所述延遲時間時,所述應(yīng)用程序管理服務(wù)開始掃描所述最小子集的 應(yīng)用之外的其他應(yīng)用。
6. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述最小子集參數(shù)以代碼方式定義或者 以XML文件方式配置。
【文檔編號】G06F9/445GK104252365SQ201310257387
【公開日】2014年12月31日 申請日期:2013年6月25日 優(yōu)先權(quán)日:2013年6月25日
【發(fā)明者】郭方強 申請人:上海博泰悅臻電子設(shè)備制造有限公司