一種皮膚資源加載方法及電子設備的制作方法
【專利摘要】本發明涉及互聯網【技術領域】,公開了一種皮膚資源加載方法及電子設備,以解決現有技術中子進程加載皮膚資源時性能低的技術問題,該方法應用于電子設備中,電子設備上運行有應用程序,應用程序包含主進程和至少一個子進程,包括:至少一個子進程中的第一子進程向主進程發起皮膚資源獲取請求,皮膚資源獲取請求用于獲取第一皮膚資源;主進程接收到皮膚資源獲取請求之后,復制第一皮膚資源的句柄值并發送給第一子進程;第一子進程通過句柄值從主進程的地址空間加載第一皮膚資源,達到了提高子進程加載皮膚資源的性能的技術效果。
【專利說明】一種皮膚資源加載方法及電子設備
【技術領域】
[0001]本發明涉及互聯網領域,尤其涉及一種皮膚資源加載方法及電子設備。
【背景技術】
[0002]進程是計算機操作系統分配資源的最小單位,每個進程有自己的獨立地址空間。目前多數軟件采用多進程架構。多進程應用程序包括一個主進程和多個子進程,主進程主要負責界面相關的工作,子進程負責一些后臺操作,比如數據處理等。基于不同任務,子進程有可能處理涉及界面相關的工作,這時子進程加載界面時就需要使用皮膚資源。
[0003]如圖1所示,為現有技術中子進程加載皮膚資源的流程圖,具體包括以下步驟:
[0004]步驟S101:開始階段;
[0005]步驟S102:子進程進行界面繪制;
[0006]步驟S103:從應用程序的皮膚磁盤路徑加載皮膚資源到內容;
[0007]步驟S104:獲取皮膚資源對應的圖片進行界面繪制;
[0008]步驟S105:結束。
[0009]以上方案至少存在以下技術問題:
[0010](1)速度慢,子進程進行界面繪制所需的皮膚資源,首先需要從磁盤路徑去加載皮膚文件到內存,然后獲取圖片資源,最后再進行界面的繪制。讀磁盤10操作的CPU、時間開銷比較大,如果用戶計算機性能低,界面會出現卡頓的現象。
[0011](2)占用內存,皮膚資源已經在主進程的地址空間中存在一份,再加載一份資源到子進程地址空間,增加了應用程序的內存開銷,造成系統資源的浪費。
【發明內容】
[0012]本申請實施例提供了一種皮膚資源加載方法及電子設備,以解決現有技術中子進程加載皮膚資源時性能低的技術問題。
[0013]第一方面,本發明實施例提供一種皮膚資源加載方法,應用于電子設備中,所述電子設備上運行有應用程序,所述應用程序包含主進程和至少一個子進程,包括:
[0014]所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求,所述皮膚資源獲取請求用于獲取第一皮膚資源;
[0015]所述主進程接收到所述皮膚資源獲取請求之后,復制所述第一皮膚資源的句柄值并發送給所述第一子進程;
[0016]所述第一子進程通過所述句柄值從所述主進程的地址空間加載所述第一皮膚資源。
[0017]可選的,在所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求步驟之前,所述方法還包括:
[0018]在啟動所述應用程序時,所述主進程將所述應用程序所對應的至少一個皮膚資源以內存映像文件的方式加載到所述主進程的地址空間,并存儲所述至少一個皮膚資源的至少一個句柄值。
[0019]可選的,在所述少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求步驟之前,所述方法還包括:
[0020]所述主進程根據所述應用程序的業務需求創建所述至少一個子進程。
[0021]可選的,所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求,具體為:
[0022]所述第一子進程通過所述第一皮膚資源的皮膚資源ID向所述主進程發起所述皮膚資源獲取請求;
[0023]所述主進程復制所述第一皮膚資源的句柄值并發送給所述第一子進程,具體包括:
[0024]所述主進程根據所述皮膚資源ID確定所述句柄值,通過DuplicateHandle接口復制所述句柄值并將所述復制的句柄值發送給所述第一子進程。
[0025]可選的,在所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求步驟之前,所述方法還包括:
[0026]在檢測到所述應用程序調用插件時,確定所述插件所對應的所述第一子進程。
[0027]第二方面,本發明實施例提供一種電子設備,所述電子設備上運行有應用程序,所述應用程序包含主進程和至少一個子進程,所述電子設備包括:
[0028]請求模塊,用于控制所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求,所述皮膚資源獲取請求用于獲取第一皮膚資源;
[0029]寫入模塊,用于在所述主進程接收到所述皮膚資源獲取請求之后,控制所述主進程復制所述第一皮膚資源的句柄值并發送給所述第一子進程;
[0030]讀取模塊,用于控制所述第一子進程通過所述句柄值從所述主進程的地址空間加載所述第一皮膚資源。
[0031]可選的,所述電子設備還包括:
[0032]加載模塊,用于在啟動所述應用程序時,控制所述主進程將所述應用程序所對應的至少一個皮膚資源以內存映像文件的方式加載到所述主進程的地址空間,并存儲所述至少一個皮膚資源的至少一個句柄值。
[0033]可選的,所述電子設備還包括:
[0034]創建模塊,用于在所述少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求步驟之前,控制所述主進程根據所述應用程序的業務需求創建所述至少一個子進程。
[0035]可選的,所述請求模塊,具體用于:
[0036]控制所述第一子進程通過所述第一皮膚資源的皮膚資源ID向所述主進程發起所述皮膚資源獲取請求;
[0037]所述寫入模塊,具體用于:
[0038]所述主進程根據所述皮膚資源ID確定所述句柄值,通過DuplicateHandle接口復制所述句柄值并將所述復制的句柄值發送給所述第一子進程。
[0039]可選的,所述電子設備還包括:
[0040]確定模塊,用于在檢測到所述應用程序調用插件時,確定所述插件所對應的所述第一子進程。
[0041]本申請有益效果如下:
[0042]由于在本發明實施例中,提供了一種皮膚資源加載方法,應用于電子設備中,電子設備上運行有應用程序,應用程序包含主進程和至少一個子進程,包括:至少一個子進程中的第一子進程向主進程發起皮膚資源獲取請求,皮膚資源獲取請求用于獲取第一皮膚資源;主進程接收到皮膚資源獲取請求之后,復制第一皮膚資源的句柄值并發送給第一子進程;第一子進程通過句柄值從主進程的地址空間加載第一皮膚資源。也就是說,第一子進程在需要加載第一皮膚資源時,是直接向主進程請求獲取第一皮膚資源的句柄值,然后基于第一皮膚資源的句柄值從主進程的地址空間加載第一皮膚資源,而不需要從磁盤路徑去加載皮膚文件到內容,故而提高了子進程加載皮膚資源的性能,防止了界面卡頓現象;
[0043]且皮膚資源只需要存儲于主進程的地址空間,而不需要加載到子進程的地址空間,故而降低了應用程序的內存開銷,防止了系統資源的浪費;
[0044]進一步的,通過上述方案提高了應用程序的性能,從而使應用程序的界面更加流暢,提高了用戶的體驗度。
【專利附圖】
【附圖說明】
[0045]圖1為現有技術中子進程加載皮膚資源的方法的流程圖;
[0046]圖2為本發明實施例中皮膚資源加載方法的流程圖;
[0047]圖3為本發明實施例中電子設備的結構圖。
【具體實施方式】
[0048]本申請實施例提供了一種皮膚資源加載方法及電子設備,以解決現有技術中子進程加載皮膚資源時速度慢的技術問題。
[0049]本申請實施例的技術方案為解決上述技術問題,總體思路如下:
[0050]提供了一種皮膚資源加載方法,應用于電子設備中,電子設備上運行有應用程序,應用程序包含主進程和至少一個子進程,包括:至少一個子進程中的第一子進程向主進程發起皮膚資源獲取請求,皮膚資源獲取請求用于獲取第一皮膚資源;主進程接收到皮膚資源獲取請求之后,復制第一皮膚資源的句柄值并發送給第一子進程;第一子進程通過句柄值從主進程的地址空間加載第一皮膚資源。也就是說,第一子進程在需要加載第一皮膚資源時,是直接向主進程請求獲取第一皮膚資源的句柄值,然后基于第一皮膚資源的句柄值從主進程的地址空間加載第一皮膚資源,而不需要從磁盤路徑去加載皮膚文件到內容,故而提高了子進程加載皮膚的性能,防止了界面卡頓現象;
[0051]且皮膚資源只需要存儲于主進程的地址空間,而不需要加載到子進程的地址空間,故而降低了應用程序的內存開銷,防止了系統資源的浪費;
[0052]進一步的,通過上述方案提高了應用程序的性能,從而使應用程序的界面更加流暢,提高了用戶的體驗度。
[0053]為了更好的理解上述技術方案,下面通過附圖以及具體實施例對本申請技術方案做詳細的說明,應當理解本申請實施例以及實施例中的具體特征是對本申請技術方案的詳細的說明,而不是對本申請技術方案的限定,在不沖突的情況下,本申請實施例以及實施例中的技術特征可以相互組合。
[0054]第一方面,本發明實施例提供一種皮膚資源加載方法,應用于電子設備中,電子設備上應用程序,應用程序包含主進程和至少一個子進程,舉例來說,應用程序為多進程架構下的應用程序,請參考圖2,該方法包括:
[0055]步驟S201:至少一個子進程中的第一子進程向主進程發起皮膚資源獲取請求,皮膚資源獲取請求用于獲取第一皮膚資源;
[0056]步驟S202:主進程接收到皮膚資源獲取請求之后,復制第一皮膚資源的句柄值并發送給第一子進程;
[0057]步驟S203:第一子進程通過句柄值從主進程的地址空間加載第一皮膚資源。
[0058]作為進一步的優選實施例,在步驟S201之前,方法還包括:
[0059]在啟動應用程序時,主進程將應用程序所對應的至少一個皮膚資源以內存映像文件的方式加載到主進程的地址空間,并存儲至少一個皮膚資源的至少一個句柄值。
[0060]以應用程序為瀏覽器為例,電子設備在檢測到運行瀏覽器的操作(例如:點擊任務欄上的瀏覽器圖標的操作、雙擊桌面上的瀏覽器的圖標的操作)之后,就運行瀏覽器,在這種情況下,瀏覽器的主進程首先通過瀏覽器的皮膚資源的ID確定應用程序的至少一個皮膚資源,然后將至少一個皮膚資源加載到主進程的地址空間。其中,至少一個皮膚資源中的每個皮膚資源對應一條句柄值,通過對應的句柄值可以查找到對應的皮膚資源,故而主進程同時存儲有至少一個皮膚資源的至少一個句柄值,以通過至少一個句柄值查找獲得至少一個皮膚資源。
[0061]接著,主進程確定應用程序的主界面所需要的多個皮膚資源的ID,并通過這多個皮膚資源的ID獲取對應的多個句柄值,然后通過這個多個句柄值從主進程的地址空間獲取多個皮膚資源的圖像并將其顯示在主界面的對應位置,進而實現瀏覽器的主界面的展示,從而將瀏覽器提供給用戶使用。
[0062]作為進一步的優選實施例,在步驟S201之前,方法還包括:
[0063]主進程根據應用程序的業務需求創建至少一個子進程。
[0064]以應用程序為瀏覽器為例,瀏覽器啟動后,創建主進程,主進程主要負責界面的展示,根據業務需求,主進程創建頁面瀏覽的子進程,擴展插件管理的子進程。負責插件管理的子進程包括第三方插件的安裝,加載,使用等。常用的第三方插件有用戶界面交互,會彈出一些窗口,這些窗口運行在子進程,并且它們的繪制需要用到瀏覽器的皮膚資源。
[0065]作為進一步的優選實施例,在步驟S201之前,方法還包括:
[0066]在檢測到應用程序調用插件時,確定插件所對應的第一子進程。
[0067]以應用程序為瀏覽器為例,瀏覽器在有些應用場景會需要使用插件,而有些插件需要彈出窗口,彈出窗口則需要使用皮膚資源進行界面繪制,故而瀏覽器在檢測到用戶點擊顯示插件的操作之后,就開始調用插件,如果插件需要彈出窗口,插件所在的子進程需要繪制該彈出窗口的界面,故而需要獲取對應的第一皮膚資源。
[0068]步驟S201中,至少一個子進程中的第一子進程向主進程發起皮膚資源獲取請求,具體為:第一子進程通過第一皮膚資源的皮膚資源ID向主進程發起皮膚資源獲取請求;
[0069]由于在應用程序啟動時,主進程已經將應用程序所對應的至少一個皮膚資源以內存映像文件的方式加載到主進程的地址空間,故而直接通過第一皮膚資源的資源ID就可以向主進程請求獲取第一皮膚資源;
[0070]步驟S202中,主進程復制第一皮膚資源的句柄值并發送給第一子進程的句柄表,具體包括:主進程根據皮膚資源ID確定句柄值,然后通過調用DuplicateHandle接口復制皮膚資源的句柄值并將幅值的句柄值傳給第一子進程。
[0071]其中,DuplicateHandle接口是微軟提供的標準 API (Applicat1n ProgrammingInterface:應用程序編程接口),作用是從當前進程復制句柄到其他進程空間,即獲得一個進程句柄表中的一個記錄項,然后在另一個進程的句柄表中創建這個記錄項的一個副本。
[0072]步驟S203中,第一子進程讀取第一子進程的句柄表就能夠獲取第一皮膚資源的句柄值,該句柄值表征第一皮膚資源在主進程的地址空間的存儲位置,基于此第一子進程就能夠從主進程的地址空間獲取第一皮膚資源的圖像,然后將第一皮膚資源的圖像按照預設的顯示方式和顯示位置進行展示,就完成了對第一皮膚資源的加載。
[0073]第二方面,基于同一發明構思,本發明實施例提供一種電子設備,電子設備上運行有應用程序,應用程序包含主進程和至少一個子進程,請參考圖3,電子設備包括:
[0074]請求模塊30,用于控制至少一個子進程中的第一子進程向主進程發起皮膚資源獲取請求,皮膚資源獲取請求用于獲取第一皮膚資源;
[0075]寫入模塊31,用于在主進程接收到皮膚資源獲取請求之后,控制主進程復制第一皮膚資源的句柄值并發送給第一子進程;
[0076]讀取模塊32,用于控制第一子進程通過句柄值從主進程的地址空間加載第一皮膚資源。
[0077]可選的,電子設備還包括:
[0078]加載模塊,用于在啟動應用程序時,控制主進程將應用程序所對應的至少一個皮膚資源以內存映像文件的方式加載到內存中主進程的地址空間,并存儲至少一個皮膚資源的至少一個句柄值。
[0079]可選的,電子設備還包括:
[0080]創建模塊,用于在至少一個子進程中的第一子進程向主進程發起皮膚資源獲取請求步驟之前,控制主進程根據應用程序的業務需求創建至少一個子進程。
[0081]可選的,請求模塊30,具體用于:
[0082]控制第一子進程通過第一皮膚資源的皮膚資源ID向主進程發起皮膚資源獲取請求;
[0083]寫入模塊31,具體用于:
[0084]控制主進程根據皮膚資源ID確定句柄值,通過DuplicateHandle接口復制句柄值并將復制的句柄值發送給第一子進程。
[0085]可選的,電子設備還包括:
[0086]確定模塊,用于在檢測到應用程序調用插件時,確定插件所對應的第一子進程。
[0087]本發明的一個或多個實施例,至少具有以下有益效果:
[0088]由于在本發明實施例中,提供了一種皮膚資源加載方法,應用于電子設備中,電子設備上運行有應用程序,應用程序包含主進程和至少一個子進程,包括:至少一個子進程中的第一子進程向主進程發起皮膚資源獲取請求,皮膚資源獲取請求用于獲取第一皮膚資源;主進程接收到皮膚資源獲取請求之后,復制第一皮膚資源的句柄值并發送給第一子進程;第一子進程通過句柄值從主進程的地址空間加載第一皮膚資源。也就是說,第一子進程在需要加載第一皮膚資源時,是直接向主進程請求獲取第一皮膚資源的句柄值,然后基于第一皮膚資源的句柄值從主進程的地址空間加載第一皮膚資源,而不需要從磁盤路徑去加載皮膚文件到內容,故而提高了子進程加載皮膚的性能,防止了界面卡頓現象;
[0089]且皮膚資源只需要存儲于主進程的地址空間,而不需要加載到子進程的地址空間,故而降低了應用程序的內存開銷,防止了系統資源的浪費;
[0090]進一步的,通過上述方案提高了應用程序的性能,從而使應用程序的界面更加流暢,提高了用戶的體驗度。
[0091]本領域內的技術人員應明白,本發明的實施例可提供為方法、系統、或計算機程序產品。因此,本發明可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
[0092]本發明是參照根據本發明實施例的方法、設備(系統)、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0093]這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0094]這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0095]盡管已描述了本發明的優選實施例,但本領域內的技術人員一旦得知了基本創造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優選實施例以及落入本發明范圍的所有變更和修改。
[0096]顯然,本領域的技術人員可以對本發明進行各種改動和變型而不脫離本發明的精神和范圍。這樣,倘若本發明的這些修改和變型屬于本發明權利要求及其等同技術的范圍之內,則本發明也意圖包含這些改動和變型在內。
【權利要求】
1.一種皮膚資源加載方法,應用于電子設備中,所述電子設備上運行有應用程序,所述應用程序包含主進程和至少一個子進程,其特征在于,包括: 所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求,所述皮膚資源獲取請求用于獲取第一皮膚資源; 所述主進程接收到所述皮膚資源獲取請求之后,復制所述第一皮膚資源的句柄值并發送給所述第一子進程; 所述第一子進程通過所述句柄值從所述主進程的地址空間加載所述第一皮膚資源。
2.如權利要求1所述的方法,其特征在于,在所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求步驟之前,所述方法還包括: 在啟動所述應用程序時,所述主進程將所述應用程序所對應的至少一個皮膚資源以內存映像文件的方式加載到所述主進程的地址空間,并存儲所述至少一個皮膚資源的至少一個句柄值。
3.如權利要求1所述的方法,其特征在于,在所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求步驟之前,所述方法還包括: 所述主進程根據所述應用程序的業務需求創建所述至少一個子進程。
4.如權利要求1所述的方法,其特征在于,所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求,具體為: 所述第一子進程通過所述第一皮膚資源的皮膚資源ID向所述主進程發起所述皮膚資源獲取請求; 所述主進程復制所述第一皮膚資源的句柄值并發送給所述第一子進程,具體包括: 所述主進程根據所述皮膚資源ID確定所述句柄值,通過DuplicateHandle接口復制所述句柄值并將所述復制的句柄值發送給所述第一子進程。
5.如權利要求1-4任一所述的方法,其特征在于,在所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求步驟之前,所述方法還包括: 在檢測到所述應用程序調用插件時,確定所述插件所對應的所述第一子進程。
6.一種電子設備,所述電子設備上運行有應用程序,所述應用程序包含主進程和至少一個子進程,其特征在于,所述電子設備包括: 請求模塊,用于控制所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求,所述皮膚資源獲取請求用于獲取第一皮膚資源; 寫入模塊,用于在所述主進程接收到所述皮膚資源獲取請求之后,控制所述主進程復制所述第一皮膚資源的句柄值并發送給所述第一子進程; 讀取模塊,用于控制所述第一子進程通過所述句柄值從所述主進程的地址空間加載所述第一皮膚資源。
7.如權利要求6所述的電子設備,其特征在于,所述電子設備還包括: 加載模塊,用于在啟動所述應用程序時,控制所述主進程將所述應用程序所對應的至少一個皮膚資源以內存映像文件的方式加載到所述主進程的地址空間,并存儲所述至少一個皮膚資源的至少一個句柄值。
8.如權利要求6所述的電子設備,其特征在于,所述電子設備還包括: 創建模塊,用于在所述至少一個子進程中的第一子進程向所述主進程發起皮膚資源獲取請求步驟之前,控制所述主進程根據所述應用程序的業務需求創建所述至少一個子進程。
9.如權利要求6所述的電子設備,其特征在于,所述請求模塊,具體用于: 控制所述第一子進程通過所述第一皮膚資源的皮膚資源ID向所述主進程發起所述皮膚資源獲取請求; 所述寫入模塊,具體用于: 控制所述主進程根據所述皮膚資源ID確定所述句柄值,通過DuplicateHandle接口復制所述句柄值并將所述復制的句柄值發送給所述第一子進程。
10.如權利要求6-9任一所述的電子設備,其特征在于,所述電子設備還包括: 確定模塊,用于在檢測到所述應用程序調用插件時,確定所述插件所對應的所述第一子進程。
【文檔編號】G06F9/445GK104461636SQ201410766157
【公開日】2015年3月25日 申請日期:2014年12月11日 優先權日:2014年12月11日
【發明者】劉靜, 柯津津, 陳建軍 申請人:北京搜狗科技發展有限公司