系統(tǒng)啟動(dòng)預(yù)加載方法及裝置制造方法
【專利摘要】一種系統(tǒng)啟動(dòng)預(yù)加載方法,包括:啟動(dòng)預(yù)加載進(jìn)程;獲取自定義預(yù)加載列表,所述自定義預(yù)加載列表中包括由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件;通過所述預(yù)加載進(jìn)程加載所述自定義預(yù)加載列表中的文件。此外,還提供了一種系統(tǒng)啟動(dòng)預(yù)加載裝置。上述系統(tǒng)啟動(dòng)預(yù)加載方法和裝置可以提高操作系統(tǒng)的啟動(dòng)速度。
【專利說明】系統(tǒng)啟動(dòng)預(yù)加載方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及操作系統(tǒng)領(lǐng)域,特別是涉及一種系統(tǒng)啟動(dòng)預(yù)加載方法及裝置。
【背景技術(shù)】
[0002]隨著操作系統(tǒng)技術(shù)的發(fā)展,出現(xiàn)了較多基于開源Linux系統(tǒng)的普遍適用于智能手機(jī)、平板電腦、PDA等便攜式移動(dòng)設(shè)備的操作系統(tǒng),例如Android系統(tǒng)。由于其開源的特性,Android系統(tǒng)包括原生系統(tǒng)和第三方系統(tǒng)。原生系統(tǒng)為操作系統(tǒng)的原始標(biāo)準(zhǔn)版本,包括原生系統(tǒng)類文件和原生系統(tǒng)資源文件;第三方系統(tǒng)為在原生系統(tǒng)的基礎(chǔ)上進(jìn)行二次開發(fā),即加入了第三方類文件或資源文件的第三方擴(kuò)展版本。在傳統(tǒng)技術(shù)中,為了加快應(yīng)用程序進(jìn)程的啟動(dòng)加載速度,在設(shè)備開機(jī)時(shí),即操作系統(tǒng)啟動(dòng)時(shí)通常會(huì)利用預(yù)加載進(jìn)程對部分文件進(jìn)行預(yù)加載。
[0003]在Android系統(tǒng)中,預(yù)加載進(jìn)程為Zygote進(jìn)程。Zygote進(jìn)程是Android系統(tǒng)中所有應(yīng)用程序進(jìn)程的父進(jìn)程,Android系統(tǒng)上運(yùn)行的應(yīng)用程序進(jìn)程均為由Zygote進(jìn)程復(fù)制得到的子進(jìn)程。Android系統(tǒng)在啟動(dòng)應(yīng)用程序進(jìn)程時(shí),通過復(fù)制Zygote進(jìn)程的進(jìn)程信息并分配新的進(jìn)程號來啟動(dòng)相應(yīng)的應(yīng)用程序進(jìn)程,這個(gè)過程也叫fork。Zygote進(jìn)程的進(jìn)程信息包括Zygote進(jìn)程預(yù)加載到內(nèi)存中的全局資源,全局資源可以是類文件或資源文件。所有新生成的應(yīng)用程序進(jìn)程都共享Zygote進(jìn)程已加載的全局資源。應(yīng)用程序進(jìn)程也可以請求分配獨(dú)占的內(nèi)存空間用于加載與其自身相關(guān)的資源。
[0004]傳統(tǒng)技術(shù)中,Android系統(tǒng)在啟動(dòng)時(shí)可通過Linux內(nèi)核經(jīng)過一系列初始化過程后啟動(dòng)預(yù)加載進(jìn)程。預(yù)加載進(jìn)程可根據(jù)預(yù)設(shè)的原始預(yù)加載列表預(yù)加載文件。原始預(yù)加載列表中包含了設(shè)備在出廠時(shí)寫入的原生系統(tǒng)類文件、原生系統(tǒng)資源文件以及第三方擴(kuò)展文件。加載完畢后則通過啟動(dòng)系統(tǒng)服務(wù)開啟系統(tǒng)。
[0005]然而,傳統(tǒng)技術(shù)中的系統(tǒng)啟動(dòng)預(yù)加載方法中,需要加載的原始預(yù)加載列表對應(yīng)的所有文件,由于文件眾多且數(shù)據(jù)量較大,使得預(yù)加載速度較慢,從而減緩了操作系統(tǒng)的啟動(dòng)速度。
【發(fā)明內(nèi)容】
[0006]基于此,有必要提供一種能提高操作系統(tǒng)的啟動(dòng)速度的系統(tǒng)啟動(dòng)預(yù)加載方法。
[0007]一種系統(tǒng)啟動(dòng)預(yù)加載方法,包括:
[0008]啟動(dòng)預(yù)加載進(jìn)程;
[0009]獲取自定義預(yù)加載列表,所述自定義預(yù)加載列表中包括由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件;
[0010]通過所述預(yù)加載進(jìn)程加載所述自定義預(yù)加載列表中的文件。
[0011]此外,還有必要提供一種能提高操作系統(tǒng)的啟動(dòng)速度的系統(tǒng)啟動(dòng)預(yù)加載裝置。
[0012]一種系統(tǒng)啟動(dòng)預(yù)加載裝置,包括:
[0013]預(yù)加載進(jìn)程啟動(dòng)模塊,用于啟動(dòng)預(yù)加載進(jìn)程;[0014]預(yù)加載列表獲取模塊,用于獲取自定義預(yù)加載列表,所述自定義預(yù)加載列表中包括由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件;
[0015]預(yù)加載模塊,用于通過所述預(yù)加載進(jìn)程加載所述自定義預(yù)加載列表中的文件。
[0016]上述系統(tǒng)啟動(dòng)預(yù)加載方法和裝置,在操作系統(tǒng)啟動(dòng)時(shí),通過預(yù)加載進(jìn)程對自定義預(yù)加載列表定義的文件進(jìn)行了預(yù)加載。自定義預(yù)加載列表中可僅包含由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件,也就是原生系統(tǒng)上的應(yīng)用程序啟動(dòng)所必要的文件。使得預(yù)加載過程加載的文件數(shù)量減少,從而提高了預(yù)加載的速度以及操作系統(tǒng)的啟動(dòng)速度。
【專利附圖】
【附圖說明】
[0017]圖1為一個(gè)實(shí)施例中系統(tǒng)啟動(dòng)預(yù)加載方法的流程圖;
[0018]圖2為一個(gè)實(shí)施例中更新自定義預(yù)加載列表的步驟的流程圖;
[0019]圖3為一個(gè)實(shí)施例中系統(tǒng)啟動(dòng)預(yù)加載裝置的結(jié)構(gòu)示意圖;
[0020]圖4為另一個(gè)實(shí)施例中系統(tǒng)啟動(dòng)預(yù)加載裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0021]在一個(gè)實(shí)施例中,如圖1所不,一種系統(tǒng)啟動(dòng)預(yù)加載方法,包括:
[0022]步驟S102,啟動(dòng)預(yù)加載進(jìn)程。
[0023]在一個(gè)實(shí)施例中,預(yù)加載進(jìn)程為Android系統(tǒng)中的Zygote進(jìn)程。在本實(shí)施例中,Android系統(tǒng)在啟動(dòng)時(shí),首先會(huì)啟動(dòng)Iinux內(nèi)核。Linux內(nèi)核加載完成后會(huì)啟動(dòng)init進(jìn)程解析init.rc定義的啟動(dòng)配置項(xiàng),然后啟動(dòng)Dalvik虛擬機(jī),然后通過Dalvik虛擬機(jī)啟動(dòng)Zygote 進(jìn)程。
[0024]步驟S104,獲取自定義預(yù)加載列表,自定義預(yù)加載列表中包括由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件。
[0025]自定義預(yù)加載列表為預(yù)先創(chuàng)建的文件列表,其內(nèi)可包括由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件。原生系統(tǒng)類文件和原生系統(tǒng)資源文件即原生系統(tǒng)所包含的類文件和資源文件,原生系統(tǒng)類文件和原生系統(tǒng)資源文件為原生系統(tǒng)的應(yīng)用程序所必要的文件,可保證原生系統(tǒng)的正常運(yùn)行。自定義預(yù)加載列表中的文件項(xiàng)集合可以是原始預(yù)加載列表中的文件項(xiàng)集合的子集。
[0026]在一個(gè)實(shí)施例中,在步驟S104之前,可預(yù)先創(chuàng)建空白的自定義預(yù)加載列表,然后通過下述步驟更新自定義預(yù)加載列表:
[0027]步驟S202,獲取預(yù)設(shè)的原始預(yù)加載列表。
[0028]步驟S204,通過預(yù)加載進(jìn)程加載原始預(yù)加載列表中的文件。
[0029]步驟S206,判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件,若是,則執(zhí)行步驟S208:將被加載的文件添加到自定義預(yù)加載列表中。
[0030]在一個(gè)實(shí)施例中,可根據(jù)原生系統(tǒng)的開源文件列表來判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件??深A(yù)先將原生系統(tǒng)中的文件記錄在開源文件列表中。
[0031]步驟S106,通過預(yù)加載進(jìn)程加載自定義預(yù)加載列表中的文件。
[0032]自定義預(yù)加載列表中可以文件路徑來表示文件。預(yù)加載進(jìn)程可遍歷自定義預(yù)加載列表的文件路徑(通常為基于包結(jié)構(gòu)的相對路徑),根據(jù)文件路徑讀取對應(yīng)的文件。若文件為資源文件,則直接讀取到內(nèi)存中;若文件為類文件,則在讀取編譯后按一定的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)到內(nèi)存中。
[0033]在一個(gè)實(shí)施例中,可在首次啟動(dòng)操作系統(tǒng)時(shí),執(zhí)行上述步驟S202、步驟S204和步驟 S206。
[0034]本實(shí)施例中,可判斷被加載文件的文件路徑是否包含在開源文件列表中,若是,則將其添加到自定義預(yù)加載列表中。進(jìn)一步的,若被加載的文件與原生系統(tǒng)類文件或原生系統(tǒng)資源文件具有相同的文件路徑,還可判斷被加載文件是否與該文件具有相同的信息摘要值(例如MD5值),若是則將該文件添加到自定義預(yù)加載列表中。
[0035]在本實(shí)施例中,在非首次啟動(dòng)系統(tǒng)時(shí),即可執(zhí)行步驟S102、步驟S104和步驟S106。先獲取自定義預(yù)加載列表,然后根據(jù)該自定義預(yù)加載列表加載文件,而不用根據(jù)原始預(yù)加載列表加載文件。
[0036]在一個(gè)實(shí)施例中,判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件的步驟之前還包括:
[0037]獲取被加載的文件的加載耗時(shí);
[0038]判斷加載耗時(shí)是否大于閾值,若是,則繼續(xù)執(zhí)行判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件的步驟。
[0039]加載耗時(shí)即為預(yù)加載進(jìn)程加載文件耗費(fèi)的時(shí)間,通常為I/O耗時(shí)和/或編譯耗時(shí)。當(dāng)加載耗時(shí)大于閾值時(shí),該文件的加載過程耗時(shí)較多,若不通過預(yù)加載進(jìn)程對其在開機(jī)時(shí)進(jìn)行預(yù)加載,而由應(yīng)用程序進(jìn)程在啟動(dòng)時(shí)進(jìn)行加載,會(huì)造成應(yīng)用程序進(jìn)程啟動(dòng)較慢,而加載耗時(shí)較小的文件不會(huì)對應(yīng)用程序進(jìn)程的啟動(dòng)速度造成影響。因此,在開機(jī)預(yù)加載時(shí),僅加載耗時(shí)較長的文件,而放棄加載耗時(shí)較小的文件,可以在不影響后續(xù)的應(yīng)用程序啟動(dòng)的情況下加快預(yù)加載速度。
[0040]在一個(gè)實(shí)施例中,可根據(jù)系統(tǒng)硬件參數(shù)預(yù)先設(shè)定閾值。對于硬件性能強(qiáng)勁的終端,閾值可偏小;對于硬件性能較弱的終端,閾值可設(shè)置偏大。
[0041]在一個(gè)實(shí)施例中,判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件的步驟之前還包括:
[0042]獲取系統(tǒng)啟動(dòng)的時(shí)間戳;獲取被加載的文件開始被加載時(shí)的時(shí)間戳;判斷文件開始被加載時(shí)的時(shí)間戳是否早于系統(tǒng)啟動(dòng)的時(shí)間戳,若是,則繼續(xù)執(zhí)行判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件的步驟。
[0043]例如,Android系統(tǒng)啟動(dòng)過程中,通過預(yù)加載進(jìn)程(即Zygote進(jìn)程)加載文件后,可啟動(dòng)系統(tǒng)服務(wù),待系統(tǒng)服務(wù)啟動(dòng)完成后,會(huì)與預(yù)加載進(jìn)程進(jìn)行Socket通信,通知預(yù)加載進(jìn)程系統(tǒng)啟動(dòng)完畢。在本實(shí)施例中,可根據(jù)該通知獲取系統(tǒng)啟動(dòng)的時(shí)間戳。
[0044]由于啟動(dòng)系統(tǒng)服務(wù)時(shí),預(yù)加載進(jìn)程仍然會(huì)加載一些與系統(tǒng)服務(wù)有關(guān)的文件。因此,在文件開始被加載時(shí)的時(shí)間戳早于系統(tǒng)啟動(dòng)的時(shí)間戳?xí)r,表示該被加載的文件為需要預(yù)加載的文件,從而避免了對不需要進(jìn)行預(yù)加載的文件進(jìn)行預(yù)加載的情況。
[0045]在一個(gè)實(shí)施例中,根據(jù)自定義預(yù)加載列表通過預(yù)加載進(jìn)程加載文件的步驟之后還包括:
[0046]獲取系統(tǒng)啟動(dòng)完成通知,獲取預(yù)設(shè)的原始預(yù)加載列表,通過預(yù)加載進(jìn)程異步加載原始預(yù)加載列表中的文件。
[0047]如前所述,系統(tǒng)啟動(dòng)完成后系統(tǒng)服務(wù)會(huì)通過Socket向預(yù)加載進(jìn)程發(fā)送啟動(dòng)完成通知。在系統(tǒng)啟動(dòng)后,則可讀取原始預(yù)加載列表,并異步加載原始預(yù)加載列表中存在但自定義預(yù)加載列表中不存在的文件。由于此時(shí)系統(tǒng)已經(jīng)開機(jī),預(yù)加載進(jìn)程進(jìn)行異步加載不會(huì)對用戶的操作產(chǎn)生影響,即用戶對終端進(jìn)行操作時(shí),不用等待預(yù)加載進(jìn)程對原始預(yù)加載列表加載完成。同時(shí),后續(xù)啟動(dòng)的第三方應(yīng)用程序進(jìn)程仍然可與預(yù)加載進(jìn)程共享內(nèi)存中已加載的資源,從而加快后續(xù)啟動(dòng)的第三方應(yīng)用程序進(jìn)程的啟動(dòng)速度。
[0048]在一個(gè)實(shí)施例中,如圖3所示,一種系統(tǒng)啟動(dòng)預(yù)加載裝置,包括:預(yù)加載進(jìn)程啟動(dòng)模塊102、預(yù)加載列表獲取模塊104、預(yù)加載模塊106,其中:
[0049]預(yù)加載進(jìn)程啟動(dòng)模塊102,用于啟動(dòng)預(yù)加載進(jìn)程。
[0050]在一個(gè)實(shí)施例中,預(yù)加載進(jìn)程為Android系統(tǒng)中的Zygote進(jìn)程。在本實(shí)施例中,Android系統(tǒng)在啟動(dòng)時(shí),首先會(huì)啟動(dòng)Iinux內(nèi)核。Linux內(nèi)核加載完成后會(huì)啟動(dòng)init進(jìn)程解析init.rc定義的啟動(dòng)配置項(xiàng),然后啟動(dòng)Dalvik虛擬機(jī)。預(yù)加載進(jìn)程啟動(dòng)模塊102可用于通過Dalvik虛擬機(jī)啟動(dòng)Zygote進(jìn)程。
[0051]預(yù)加載列表獲取模塊104,用于獲取自定義預(yù)加載列表,自定義預(yù)加載列表中包括由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件。
[0052]自定義預(yù)加載列表為預(yù)先創(chuàng)建的文件列表,其內(nèi)可包括由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件。原生系統(tǒng)類文件和原生系統(tǒng)資源文件即原生系統(tǒng)所包含的類文件和資源文件,原生系統(tǒng)類文件和原生系統(tǒng)資源文件為原生系統(tǒng)的應(yīng)用程序所必要的文件,可保證原生系統(tǒng)的正常運(yùn)行。自定義預(yù)加載列表中的文件項(xiàng)集合可以是原始預(yù)加載列表中的文件項(xiàng)集合的子集。
[0053]預(yù)加載模塊106,用于根據(jù)自定義預(yù)加載列表通過預(yù)加載進(jìn)程加載文件。
[0054]自定義預(yù)加載列表中可以文件路徑來表示文件。預(yù)加載模塊106可用于通過預(yù)加載進(jìn)程遍歷自定義預(yù)加載列表的文件路徑(通常為基于包結(jié)構(gòu)的相對路徑),根據(jù)文件路徑讀取對應(yīng)的文件。若文件為資源文件,則直接讀取到內(nèi)存中;若文件為類文件,則在讀取編譯后按一定的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)到內(nèi)存中。
[0055]在一個(gè)實(shí)施例中,在首次啟動(dòng)操作系統(tǒng)時(shí),預(yù)加載列表獲取模塊104還可用于獲取預(yù)設(shè)的原始預(yù)加載列表。預(yù)加載模塊106還用于通過預(yù)加載進(jìn)程加載原始預(yù)加載列表中的文件。在本實(shí)施例中,在非首次啟動(dòng)Android系統(tǒng)時(shí),預(yù)加載列表獲取模塊104即可用于獲取自定義預(yù)加載列表,預(yù)加載模塊106即用于根據(jù)自定義預(yù)加載列表通過預(yù)加載進(jìn)程加載文件,而不用根據(jù)原始預(yù)加載列表加載文件。
[0056]在本實(shí)施例中,如圖4所示,系統(tǒng)啟動(dòng)預(yù)加載裝置還包括自定義預(yù)加載列表更新模塊108,用于判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件,若是,則將被加載的文件添加到自定義預(yù)加載列表中。
[0057]在一個(gè)實(shí)施例中,自定義預(yù)加載列表更新模塊108可用于根據(jù)原生系統(tǒng)的開源文件列表來判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件。可預(yù)先將原生系統(tǒng)中的文件記錄在開源文件列表中。
[0058]在一個(gè)實(shí)施例中,自定義預(yù)加載列表更新模塊108還可用于判斷被加載文件的文件路徑是否包含在開源文件列表中,若是,則將其添加到自定義預(yù)加載列表中。進(jìn)一步的,自定義預(yù)加載列表更新模塊108還可用于在被加載的文件與原生系統(tǒng)類文件或原生系統(tǒng)資源文件具有相同的文件路徑時(shí),判斷被加載文件是否與該文件具有相同的信息摘要值(例如MD5值),若是則將該文件添加到自定義預(yù)加載列表中。
[0059]在一個(gè)實(shí)施例中,自定義預(yù)加載列表更新模塊108還可用于獲取被加載的文件的加載耗時(shí),在加載耗時(shí)大于閾值時(shí),判斷文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件,若是,則將被加載的文件添加到自定義預(yù)加載列表中。
[0060]加載耗時(shí)即為預(yù)加載進(jìn)程加載文件耗費(fèi)的時(shí)間,通常為I/O耗時(shí)和/或編譯耗時(shí)。當(dāng)加載耗時(shí)大于閾值時(shí),該文件的加載過程耗時(shí)較多,若不通過預(yù)加載進(jìn)程對其在開機(jī)時(shí)進(jìn)行預(yù)加載,而由應(yīng)用程序進(jìn)程在啟動(dòng)時(shí)進(jìn)行加載,會(huì)造成應(yīng)用程序進(jìn)程啟動(dòng)較慢,而加載耗時(shí)較小的文件不會(huì)對應(yīng)用程序進(jìn)程的啟動(dòng)速度造成影響。因此,在開機(jī)預(yù)加載時(shí),僅加載耗時(shí)較長的文件,而放棄加載耗時(shí)較小的文件,可以在不影響后續(xù)的應(yīng)用程序啟動(dòng)的情況下加快預(yù)加載速度。
[0061]在一個(gè)實(shí)施例中,自定義預(yù)加載列表更新模塊108還可用于獲取系統(tǒng)啟動(dòng)的時(shí)間戳,獲取被加載的文件開始被加載時(shí)的時(shí)間戳,在文件開始被加載時(shí)的時(shí)間戳早于系統(tǒng)啟動(dòng)的時(shí)間戳?xí)r,判斷文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件,若是,則將被加載的文件添加到自定義預(yù)加載列表中。
[0062]例如,Android系統(tǒng)啟動(dòng)過程中,通過預(yù)加載進(jìn)程(即Zygote進(jìn)程)加載文件后,可啟動(dòng)系統(tǒng)服務(wù),待系統(tǒng)服務(wù)啟動(dòng)完成后,會(huì)與預(yù)加載進(jìn)程進(jìn)行Socket通信,通知預(yù)加載進(jìn)程系統(tǒng)啟動(dòng)完畢。在本實(shí)施例中,可根據(jù)該通知獲取系統(tǒng)啟動(dòng)的時(shí)間戳。
[0063]由于啟動(dòng)系統(tǒng)服務(wù)時(shí),預(yù)加載進(jìn)程仍然會(huì)加載一些與系統(tǒng)服務(wù)有關(guān)的文件。因此,在文件開始被加載時(shí)的時(shí)間戳早于系統(tǒng)啟動(dòng)的時(shí)間戳?xí)r,表示該被加載的文件為需要預(yù)加載的文件,從而避免了對不需要進(jìn)行預(yù)加載的文件進(jìn)行預(yù)加載的情況。
[0064]在一個(gè)實(shí)施例中,如圖4所示,系統(tǒng)啟動(dòng)預(yù)加載裝置包括延遲預(yù)加載模塊110,用于獲取系統(tǒng)啟動(dòng)完成通知,獲取預(yù)設(shè)的原始預(yù)加載列表,通過預(yù)加載進(jìn)程異步加載原始預(yù)加載列表中的文件。
[0065]如前所述,系統(tǒng)啟動(dòng)完成后系統(tǒng)服務(wù)會(huì)通過Socket向預(yù)加載進(jìn)程發(fā)送啟動(dòng)完成通知。在系統(tǒng)啟動(dòng)后,延遲預(yù)加載模塊110則可用于讀取原始預(yù)加載列表,并異步加載原始預(yù)加載列表中存在但自定義預(yù)加載列表中不存在的文件。由于此時(shí)系統(tǒng)已經(jīng)開機(jī),預(yù)加載進(jìn)程進(jìn)行異步加載不會(huì)對用戶的操作產(chǎn)生影響,即用戶對終端進(jìn)行操作時(shí),不用等待預(yù)加載進(jìn)程對原始預(yù)加載列表加載完成。同時(shí),后續(xù)啟動(dòng)的第三方應(yīng)用程序進(jìn)程仍然可與預(yù)加載進(jìn)程共享內(nèi)存中已加載的資源,從而加快后續(xù)啟動(dòng)的第三方應(yīng)用程序進(jìn)程的啟動(dòng)速度。
[0066]上述系統(tǒng)啟動(dòng)預(yù)加載方法和裝置,在操作系統(tǒng)啟動(dòng)時(shí),通過預(yù)加載進(jìn)程對自定義預(yù)加載列表定義的文件進(jìn)行了預(yù)加載。自定義預(yù)加載列表中可僅包含由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件,也就是原生系統(tǒng)上的應(yīng)用程序啟動(dòng)所必要的文件。使得預(yù)加載過程加載的文件數(shù)量減少,從而提高了預(yù)加載的速度以及操作系統(tǒng)的啟動(dòng)速度。
[0067]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(Random AccessMemory, RAM)等。
[0068]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種系統(tǒng)啟動(dòng)預(yù)加載方法,包括: 啟動(dòng)預(yù)加載進(jìn)程; 獲取自定義預(yù)加載列表,所述自定義預(yù)加載列表中包括由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件; 通過所述預(yù)加載進(jìn)程加載所述自定義預(yù)加載列表中的文件。
2.根據(jù)權(quán)利要求1所述的系統(tǒng)啟動(dòng)預(yù)加載方法,其特征在于,所述方法還包括: 獲取預(yù)設(shè)的原始預(yù)加載列表; 通過所述預(yù)加載進(jìn)程加載所述原始預(yù)加載列表中的文件; 判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件,若是,則將所述被加載的文件添加到所述自定義預(yù)加載列表中。
3.根據(jù)權(quán)利要求2所述的系統(tǒng)啟動(dòng)預(yù)加載方法,其特征在于,所述判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件的步驟之前還包括: 獲取所述被加載的文件的加載耗時(shí); 判斷所述加載耗時(shí)是否大于閾值,若是,則繼續(xù)執(zhí)行所述判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件的步驟。
4.根據(jù)權(quán)利要求2所述的系統(tǒng)啟動(dòng)預(yù)加載方法,其特征在于,所述判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件的步驟之前還包括: 獲取系統(tǒng)啟動(dòng)的時(shí)間戳; 獲取所述被加載的文件開始被加載時(shí)的時(shí)間戳; 判斷所述文件開始被加載時(shí)的時(shí)間戳是否早于所述系統(tǒng)啟動(dòng)的時(shí)間戳,若是,則繼續(xù)執(zhí)行所述判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件的步驟。
5.根據(jù)權(quán)利要求1至4任一項(xiàng)所述的系統(tǒng)啟動(dòng)預(yù)加載方法,其特征在于,所述通過所述預(yù)加載進(jìn)程加載所述自定義預(yù)加載列表中的文件的步驟之后還包括: 犾取系統(tǒng)啟動(dòng)完成通知; 獲取預(yù)設(shè)的原始預(yù)加載列表; 通過所述預(yù)加載進(jìn)程異步加載所述原始預(yù)加載列表中的文件。
6.一種系統(tǒng)啟動(dòng)預(yù)加載裝置,其特征在于,包括: 預(yù)加載進(jìn)程啟動(dòng)模塊,用于啟動(dòng)預(yù)加載進(jìn)程; 預(yù)加載列表獲取模塊,用于獲取自定義預(yù)加載列表,所述自定義預(yù)加載列表中包括由原始預(yù)加載列表提取的原生系統(tǒng)類文件和/或原生系統(tǒng)資源文件; 預(yù)加載模塊,用于通過所述預(yù)加載進(jìn)程加載所述自定義預(yù)加載列表中的文件。
7.根據(jù)權(quán)利要求6所述的系統(tǒng)啟動(dòng)預(yù)加載裝置,其特征在于,所述預(yù)加載列表獲取模塊還用于獲取預(yù)設(shè)的原始預(yù)加載列表;所述預(yù)加載模塊還用于通過所述預(yù)加載進(jìn)程加載所述原始預(yù)加載列表中的文件; 所述裝置還包括自定義預(yù)加載列表更新模塊,用于判斷被加載的文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件,若是,則將所述被加載的文件添加到所述自定義預(yù)加載列表中。
8.根據(jù)權(quán)利要求7所述的系統(tǒng)啟動(dòng)預(yù)加載裝置,其特征在于,所述自定義預(yù)加載列表更新模塊還用于獲取所述被加載的文件的加載耗時(shí),在所述加載耗時(shí)大于閾值時(shí),判斷所述文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件,若是,則將所述被加載的文件添加到所述自定義預(yù)加載列表中。
9.根據(jù)權(quán)利要求7所述的系統(tǒng)啟動(dòng)預(yù)加載裝置,其特征在于,所述自定義預(yù)加載列表更新模塊還用于獲取系統(tǒng)啟動(dòng)的時(shí)間戳,獲取所述被加載的文件開始被加載時(shí)的時(shí)間戳,在所述文件開始被加載時(shí)的時(shí)間戳早于所述系統(tǒng)啟動(dòng)的時(shí)間戳?xí)r,判斷所述文件是否為原生系統(tǒng)類文件或原生系統(tǒng)資源文件,若是,則將所述被加載的文件添加到所述自定義預(yù)加載列表中。
10.根據(jù)權(quán)利要求6至9任一項(xiàng)所述的系統(tǒng)啟動(dòng)預(yù)加載裝置,其特征在于,還包括延遲預(yù)加載模塊,用于獲取系統(tǒng)啟動(dòng)完成通知,獲取預(yù)設(shè)的原始預(yù)加載列表,通過所述預(yù)加載進(jìn)程異步加載所述原始預(yù) 加載列表中的文件。
【文檔編號】G06F9/445GK103577212SQ201210280636
【公開日】2014年2月12日 申請日期:2012年8月8日 優(yōu)先權(quán)日:2012年8月8日
【發(fā)明者】丁尋 申請人:騰訊科技(深圳)有限公司