一種縮短安卓操作系統(tǒng)啟動時間的設置方法
【專利摘要】本發(fā)明公開了一種縮短安卓操作系統(tǒng)啟動時間的設置方法,屬于操作系統(tǒng)快速啟動【技術領域】。本發(fā)明包括啟動安卓設備,執(zhí)行引導程序,由引導程序裝載Linux內核;再執(zhí)行安卓用戶空間資源加載、本地服務開啟和用戶分區(qū)掃描后,執(zhí)行Zygote進程,在加載完安卓虛擬機所需的類與資源后,中斷該進程并為其設置還原點文件,以及創(chuàng)建還原點文件檢查進程,設置該進程在引導程序裝載Linux內核后啟動,用于判斷是否存在所述還原點文件,若存在,則根據還原點文件對初始化安卓虛擬機進程進行還原;若不存在,則執(zhí)行初始化安卓虛擬機進程。本發(fā)明用于安卓設備,能在保證用戶體驗的前提下顯著縮短系統(tǒng)啟動時間。
【專利說明】一種縮短安卓操作系統(tǒng)啟動時間的設置方法
【技術領域】
[0001]本發(fā)明涉及操作系統(tǒng)快速啟動技術,特別是一種基于安卓操作系統(tǒng)的快速啟動方法。
【背景技術】
[0002]安卓是一種基于Linux的自由及開源的操作系統(tǒng),安卓操作系統(tǒng)已廣泛應用于移動設備、智能家電等領域,如智能手機、平板電腦、機頂盒、智能電視等。隨著安卓操作系統(tǒng)在這些領域的大量使用,系統(tǒng)啟動速度慢成為許多用戶抱怨的缺點。相比手機這類平時較少斷電冷啟動的設備,平板電腦、智能電視等在實際使用中斷電冷啟動的頻率相對較高,開機速度是影響用戶體驗的一個重要因素。
[0003]安卓操作系統(tǒng)啟動過程如圖1所示,按照先后順序分別為:引導程序、Linux內核、本地服務、安卓虛擬機、安卓服務、應用程序的啟動。安卓操作系統(tǒng)從設備通電到進入安卓用戶界面,一般需要35秒左右的時間,而用戶空間啟動就占用了多于28秒的時間:從Zygote進程(該進程用于設備開機過程中初始化安卓虛擬機)被創(chuàng)建到SystemServer進程(該進程用于管理安卓系統(tǒng)服務)被創(chuàng)建用時18秒左右;從SystemServer進程被創(chuàng)建到最終進入用戶界面,用時10秒左右。Zygote進程通過預加載近2800多個類以及圖標、圖像、字符串等資源來完成安卓虛擬機的初始化,這會消耗大量時間。SystemServer進程的耗時在于啟動安卓服務并掃描安裝包。
[0004]當前縮短安卓啟動時間的方案主要是基于ARM Hibernat1n(休眠/喚醒技術)的方法:將內存中的所有數據以及CPU、設備的運行狀態(tài)的數據全部保存到該方案所申請的內存空間中,生成快速啟動的內存映像并將內存映像以特定格式保存到外存(非易失的存儲設備),以后設備每次啟動時由引導程序從外存讀取特定格式的內存映像到內存并且恢復CPU、設備的運行狀態(tài)信息。該方法直接從備份的映像文件讀取信息并恢復系統(tǒng)的運行狀態(tài),跳過了每次啟動時對最新的系統(tǒng)分區(qū)和用戶分區(qū)的掃描階段,因此用戶每次安裝新應用程序后必須重新做一次系統(tǒng)的休眠/喚醒以生成內存映像,否則設備重啟后新安裝的應用程序就會消失,而這一過程需要花費較長的時間,該缺點嚴重影響了用戶體驗。
【發(fā)明內容】
[0005]本發(fā)明目的是針對安卓操作系統(tǒng)啟動較緩慢的問題以及現有相關技術方案的不足,提出了一種在用戶空間縮短安卓操作系統(tǒng)啟動時間的設置方法。
[0006]為了實現上述目的,本發(fā)明的技術方案是:改進現有的初始化安卓虛擬機進程(Zygote進程)的啟動過程,其具體實現包括下列步驟:
[0007]步驟1:啟動安卓設備,執(zhí)行引導程序,由引導程序裝載Linux內核;再執(zhí)行安卓用戶空間資源加載、本地服務開啟和用戶分區(qū)掃描;
[0008]步驟2:執(zhí)行初始化安卓虛擬機進程,在加載完安卓虛擬機所需的類與資源后,中斷初始化安卓虛擬機進程;
[0009]步驟3:為Zygote進程創(chuàng)建還原點:設置還原點文件的文件目錄(可任意設置存放文件目錄),并在該文件目錄下創(chuàng)建還原點文件,所述還原點文件包括當前進程鏈接信息、進程ID、CPU狀態(tài)信息、進程的內存執(zhí)行環(huán)境信息;
[0010]創(chuàng)建還原點文件檢查進程,設置所述還原點文件檢查進程在引導程序裝載Linux內核后啟動,用于判斷是否存在所述還原點文件(即用戶在啟動安卓設備時起作用),若存在,則根據還原點文件對Zygote進程進行還原(即Zygote進程在還原點處開始運行從而跳過了類與資源的預加載階段,完成快速啟動過程);若不存在,則基于現有的方式執(zhí)行Zygote 進程。
[0011]本發(fā)明對現有的Zygote進程創(chuàng)建了還原點,每次系統(tǒng)啟動時只需要找到相應的還原點文件進行還原即可,避免了系統(tǒng)每次啟動時進行重復的預加載類與資源操作,這一優(yōu)化可以節(jié)約14秒左右的系統(tǒng)啟動時間。同時,由于本發(fā)明不會跳過每次啟動時對最新的系統(tǒng)分區(qū)和用戶分區(qū)的掃描階段,用戶無需靠重新生成內存映像去保證設備重啟后新安裝應用的存在,彌補了現有方案的不足,提高了用戶體驗。
[0012]進一步的,本發(fā)明的步驟3還包括,在創(chuàng)建還原點文件后,繼續(xù)執(zhí)行初始化安卓虛擬機進程,并判斷系統(tǒng)是否能進行安卓用戶界面,若否,則執(zhí)行步驟2,該處理用于檢測備份Zygote進程還原點文件成功是否備份成功。
[0013]為了進一步縮短系統(tǒng)啟動時間,本發(fā)明還包括延遲加載包、延遲啟動初始服務設置:
[0014]即將系統(tǒng)分區(qū)的安裝包和服務分為延遲安裝包、延遲服務和啟動安裝包、啟動服務(具體可根據用戶需求調查挑選出用戶不常用或系統(tǒng)啟動后不會被用戶立即使用的安裝包和服務作為延遲安裝包、延遲服務),將延遲安裝包和服務從系統(tǒng)分區(qū)移動到用戶分區(qū);在安卓操作系統(tǒng)啟動完成后,再啟動延遲安裝包和服務。
[0015]該延遲設置可以在上述步驟1、2或3任意一個步驟處理中進行或者在完成上述步驟1、2、3之后。在上述設置中,對非必要的安裝包及服務進行延遲加載的操作,這一方法可以節(jié)約5秒左右的啟動時間。
[0016]綜上所述,由于采用了上述技術方案,本發(fā)明的有益效果是:本發(fā)明對Zygote進程創(chuàng)建了還原點,每次啟動時只需要找到相應的還原點文件進行還原即可,避免了系統(tǒng)每次啟動時進行重復的預加載類與資源操作,這一優(yōu)化可以節(jié)約14秒左右的啟動時間。其次,本發(fā)明對非必要的安裝包及服務進行延遲加載的操作,這一方法可以節(jié)約5秒左右的啟動時間。最后,由于本發(fā)明不會跳過每次啟動時對最新的系統(tǒng)分區(qū)和用戶分區(qū)的掃描階段,用戶無需靠重新生成內存映像去保證設備重啟后新安裝應用的存在,彌補了現有方案的不足,提高了用戶體驗。
【專利附圖】
【附圖說明】
[0017]本發(fā)明將通過例子并參照附圖的方式說明,其中:
[0018]圖1是安卓操作系統(tǒng)正常啟動時的系統(tǒng)架構圖。
[0019]圖2是本發(fā)明實施例1的設置流程圖。
【具體實施方式】
[0020]為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面結合實施方式,對本發(fā)明作進一步地詳細描述。
[0021]實施例1
[0022]參見圖2,為了實現縮短安卓操作系統(tǒng)啟動時間,本發(fā)明包括下列設置:
[0023]步驟101:啟動安卓設備,執(zhí)行引導程序,由引導程序裝載Linux內核;再執(zhí)行安卓用戶空間資源加載、本地服務開啟和用戶分區(qū)掃描,即基于現有的安卓操作系統(tǒng)完成系統(tǒng)的初始化。
[0024]步驟102:由Zygote進程加載完安卓虛擬機所需的類與資源后,中斷Zygote進程(由系統(tǒng)的庫libprocr.so提供的procr_freeze_process函數(該函數具有預處理檢查功能)停掉中斷時鐘并堵塞相關信號以凍結Zygote進程)
[0025]步驟103:
[0026](I)由庫libprocr.so提供的函數完成對Zygote進程的還原點創(chuàng)建,即當調用庫libprocr.so提供的相關函數后進程就會為Zygote進程創(chuàng)建還原點:
[0027]本步驟中,基于獲取的當前安卓操作系統(tǒng)文件的文件結構,為還原點文件寫入可被庫libprocr.so識別的頭部信息(即為還原點文件設置可被庫libprocr.so識別的標示符)。
[0028]在Zygote進程的preload O函數后加入procr_request_check O庫函數,該函數向內核發(fā)送信號使得Zygote進程陷入內核為自己創(chuàng)建還原點文件(本實施例中還原點文件命名為Zygote, procr);首先指定還原點文件的文件目錄,本實施例中,設置為/data/,然后將當前Zygote進程鏈接信息、Zygote進程ID、CPU狀態(tài)信息、Zygote進程的內存執(zhí)行環(huán)境信息、signal信息(表頭文件,用于設置某一信號的對應動作)保存到所創(chuàng)建的還原點文件中;
[0029](2)創(chuàng)建還原點文件檢查進程(本實施例命名為procr進程),并設置procr進程在引導程序裝載Linux內核后啟動,用于判斷/data/下是否存在上述設置的還原點文件,若存在,則根據還原點文件對Zygote進程進行還原;否則基于現有的方式執(zhí)行Zygote進程。
[0030]本實施例中,procr進程的設置具體為:
[0031]編寫文件procr.sh:首先檢查/data/下是否存在進程還原點文件。如果存在,還原Zygote進程;否則,創(chuàng)建procr進程,并由procr進程創(chuàng)建Zygote進程,基于現有的方式執(zhí)行Zygote進程。
[0032]將procr.sh文件放到/system/bin目錄下并修改其權限為可執(zhí)行,修改init.rc腳本(該腳本記錄著初始化進程執(zhí)行的功能)使得系統(tǒng)在創(chuàng)建Zygote進程前先創(chuàng)建procr進程。
[0033]本實施例中個,在根據還原點文件對Zygote進程進行還原處理時,由procr進程的 proc_restart 程序(/system/bin/proc_restart-f/data/Zygote.procr// 恢復進程狀態(tài))根據還原點文件內容恢復Zygote進程ID、CPU狀態(tài)信息、Zygote進程的內存執(zhí)行環(huán)境信息。將proc_restart放到/system/bin目錄下修改成可執(zhí)行權限,并將還原文件Zygote,procr保存在/data目錄下,為只讀權限。Zygote進程恢復可運行狀態(tài)后,在還原點處繼續(xù)運行從而跳過耗時的類與資源的預加載階段,實現了系統(tǒng)的快速啟動。
[0034]步驟104:Zygote進程完成還原點創(chuàng)建,如果Zygote進程繼續(xù)運行最后成功進入安卓用戶界面說明備份Zygote進程還原點文件成功,否則進入步驟102重新備份;
[0035]本步驟中,Zygote進程完成還原點創(chuàng)建后退回到procr進程,先把停掉的中斷時鐘打開再把堵塞的信號恢復過來,再繼續(xù)運行后續(xù)進程(以進入安卓用戶界面)以測試是否備份Zygote進程成功。
[0036]經上述設置后的安卓設備,用戶在啟動安卓是設備后,首先執(zhí)行引導程序,由引導程序裝載Linux內核,在執(zhí)行安卓用戶空間資源加載、本地服務開啟和用戶分區(qū)掃描后,則執(zhí)行procr進程;進程procr會首先檢查/data/下是否存在還原點文件,若否,則由procr進程重新創(chuàng)建Zygote進程進入現有的啟動模式;若是,則進入本發(fā)明的快速啟動模式(根據還原文件將Zygote進程進行運行狀態(tài)還原后執(zhí)行后續(xù)進程后進入安卓用戶界面),即在還原點處繼續(xù)運行從而跳過耗時的類與資源的預加載階段,實現了系統(tǒng)的快速啟動。
[0037]實施例2
[0038]在實施例1的設置方式上增設了關于延遲安裝包、延遲服務的設置,具體為:
[0039]在步驟101中,根據用戶需求調查挑選出用戶不常用或系統(tǒng)啟動后不會被用戶立即使用的安裝包和服務,定義為延遲安裝包、延遲服務,其余的定義為啟動安裝包、啟動服務;
[0040]然后將延遲安裝包、延遲服務從系統(tǒng)分區(qū)移到用戶分區(qū),從而實現對非必要服務的暫時堵塞init.rc腳本(該腳本記錄著初始化進程執(zhí)行的功能);
[0041]本步驟中,我們以堵塞服務A為例給出具體的實施方式。首先,在init.rc腳本中添加代碼:
[0042]On property:r0.user, start = I
[0043]Start A
[0044]在init.rc腳本文件中,記錄著某個屬性改變后要采取的動作,動作的執(zhí)行條件以“on property:〈key〉=〈value〉”形式給出。當某個執(zhí)行條件相關的鍵值被設定后,與該條件相關的觸發(fā)器就會被觸發(fā)。如上所示,當r0.user, start屬性值被設置為I時,A服務就會被啟動。
[0045]最后,在安卓操作系統(tǒng)啟動完成后啟動延遲安裝包和服務,本實施例中,采用由定制的安卓應用(本實施例中命名為Delayinit.apk),選擇用戶inactivity狀態(tài)啟動被堵塞的服務并且安裝用戶分區(qū)的包。本步驟中,將定制的安卓應用一一Delayinit.apk加入系統(tǒng)。系統(tǒng)啟動完成后,安卓Applicat1n Framework會向Delayinit.apk發(fā)送一個Intent消息,命名為B00TC0MPLETED Intent。以上述服務A為例,Delayinit.apk收到關于服務A的intent消息后會選擇用戶inactivity狀態(tài)設置r0.user, start屬性為I并喚醒init進程開啟服務A。當用戶處于inactivity狀態(tài)時,Delayinit.apk也會調用“PM”工具去掃描安裝用戶分區(qū)的安裝包。所述“PM”工具由安卓操作系統(tǒng)提供,它會隱式的調用PackageManager系統(tǒng)服務完成特定分區(qū)(本實施例為用戶分區(qū))中安裝包和服務的掃描和安裝工作。
[0046]本發(fā)明的恢復Zygote進程到特定的執(zhí)行狀態(tài)與現有的基于ARM Hibernat1n的休眠/喚醒技術的不同之處在于=Zygote進程恢復到還原點處開始運行僅僅跳過了類與資源的預加載階段并不影響系統(tǒng)應用的更新,因此需要恢復的信息量少,恢復迅速。而現有的基于ARM Hibernat1n的休眠/喚醒技術會跳過安卓用戶空間啟動甚至Linux內核啟動,雖然節(jié)約了被跳過部分的啟動時間,但是需要恢復的信息量大,恢復耗時,并且每次從備份的映像文件恢復導致不能更新系統(tǒng)應用。
[0047]采用實施例1所述的方法,通過BootChart工具采集正常啟動和快速啟動的進程啟動時間信息。正常啟動時,從Zygote進程創(chuàng)建到加載完類與資源用時18秒左右;快速啟動時,完成這一過程僅用時4秒左右。
[0048]采用實施例2所述的方法,通過BootChart工具采集正常啟動和快速啟動的進程啟動時間信息。未采用延遲技術時,從SystemServer進程被創(chuàng)建到最終進入用戶界面,用時10秒左右;采用延遲技術后,完成這一過程僅用時5秒左右。
[0049]本發(fā)明并不局限于前述的【具體實施方式】。本發(fā)明擴展到任何在本說明書中披露的新特征或任何新的組合,以及披露的任一新的方法或過程的步驟或任何新的組合。
【權利要求】
1.一種縮短安卓操作系統(tǒng)啟動時間的設置方法,其特征在于,包括下列步驟: 步驟1:啟動安卓設備,執(zhí)行引導程序,由引導程序裝載Linux內核;再執(zhí)行安卓用戶空間資源加載、本地服務開啟和用戶分區(qū)掃描; 步驟2:執(zhí)行初始化安卓虛擬機進程,在加載完安卓虛擬機所需的類與資源后,中斷初始化安卓虛擬機進程; 步驟3:設置還原點文件的文件目錄,并在所述文件目錄下創(chuàng)建還原點文件,所述還原點文件包括當前進程鏈接信息、進程ID、CPU狀態(tài)信息、進程的內存執(zhí)行環(huán)境信息; 創(chuàng)建還原點文件檢查進程,設置所述還原點文件檢查進程在引導程序裝載Linux內核后啟動,用于判斷是否存在所述還原點文件,若存在,則根據還原點文件對初始化安卓虛擬機進程進行還原;若不存在,則執(zhí)行初始化安卓虛擬機進程。
2.如權利要求1所述的方法,其特征在于,所述步驟3還包括,在創(chuàng)建還原點文件后,繼續(xù)執(zhí)行初始化安卓虛擬機進程,并判斷系統(tǒng)是否能進行安卓用戶界面,若否,則執(zhí)行步驟2。
3.如權利要求1或2所述的方法,其特征在于,還包括將系統(tǒng)分區(qū)的安裝包和服務分為延遲安裝包、延遲服務和啟動安裝包、啟動服務,將延遲安裝包和服務從系統(tǒng)分區(qū)移動到用戶分區(qū);在安卓操作系統(tǒng)啟動完成后,再啟動延遲安裝包和服務。
【文檔編號】G06F9/445GK104503788SQ201410784129
【公開日】2015年4月8日 申請日期:2014年12月16日 優(yōu)先權日:2014年12月16日
【發(fā)明者】楊霞, 桑楠, 孫海泳, 石鵬, 雷林, 孫超群, 劉志偉, 武瓊, 劉維飛, 袁藝, 楊姍, 沈游人, 李昊星, 唐偉文 申請人:電子科技大學