一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明的實(shí)施例涉及嵌入式計(jì)算機(jī)軟件技術(shù)領(lǐng)域,尤其涉及一種應(yīng)用進(jìn)程內(nèi)存釋 放的優(yōu)先級(jí)調(diào)整方法及裝置。
【背景技術(shù)】
[0002] 嵌入式計(jì)算機(jī)系統(tǒng)的硬件資源比較有限,特別是運(yùn)行時(shí)內(nèi)存(英文簡(jiǎn)稱:RAM,英 文全稱:Random-Access Memory) -般不會(huì)太大,嵌入式軟件一般會(huì)對(duì)內(nèi)存使用進(jìn)行優(yōu)化, 盡量減少內(nèi)存占用加快內(nèi)存釋放,但是當(dāng)運(yùn)行的程序較多時(shí)系統(tǒng)內(nèi)存資源仍然會(huì)緊張。部 分嵌入式產(chǎn)品的軟件中會(huì)對(duì)內(nèi)存進(jìn)行實(shí)時(shí)壓縮,有的還會(huì)啟動(dòng)磁盤緩存,但是考慮到內(nèi)存 壓縮占用處理器資源導(dǎo)致軟件運(yùn)行速度變慢,以及磁盤緩存頻繁讀寫影響嵌入式存儲(chǔ)芯片 壽命,這兩種方法未得到廣泛應(yīng)用。嵌入式軟件操作系統(tǒng)一般采用專門的內(nèi)存資源釋放算 法,在后臺(tái)統(tǒng)計(jì)進(jìn)程的使用頻率、重要程度和用戶交互程度,為每個(gè)進(jìn)程計(jì)算出一個(gè)內(nèi)存釋 放的優(yōu)先級(jí)的數(shù)值,當(dāng)系統(tǒng)總內(nèi)存低于閾值時(shí)將優(yōu)先級(jí)的數(shù)值最低的應(yīng)用進(jìn)程選擇性地殺 死或關(guān)閉,釋放進(jìn)程占用的內(nèi)存使系統(tǒng)總內(nèi)存恢復(fù)到閾值之上。
[0003] Android系統(tǒng)的應(yīng)用以四大組件為單位組成,包括Activity (活動(dòng)界面)、 Service (后臺(tái)服務(wù))、Content provider (數(shù)據(jù)提供器)和 Broadcast receiver (廣播接 收器)。Android系統(tǒng)根據(jù)上述組件與用戶的交互程度動(dòng)態(tài)調(diào)節(jié)其應(yīng)用進(jìn)程的優(yōu)先級(jí),確保 交互程度高的應(yīng)用進(jìn)程有較高的進(jìn)程優(yōu)先級(jí),在內(nèi)存不足時(shí)首先殺死非活動(dòng)狀態(tài)和后臺(tái)進(jìn) 程,盡量不影響用戶的前臺(tái)交互。
[0004] 上述的內(nèi)存釋放方法對(duì)于標(biāo)準(zhǔn)的由四大組件實(shí)現(xiàn)的應(yīng)用程序能起到很好的效果。 但是,其僅僅考慮到了可見交互界面使用Activity時(shí)的場(chǎng)景,實(shí)際上有一些應(yīng)用進(jìn)程會(huì)使 用其他非Activity的方法來實(shí)現(xiàn)界面,這將可能導(dǎo)致這些應(yīng)用進(jìn)程優(yōu)先級(jí)過低,雖然在前 臺(tái)交互仍然會(huì)被殺死。例如在當(dāng)前的部分智能電視中的電視設(shè)置、畫中畫和語音助手等應(yīng) 用。在一種現(xiàn)有技術(shù)中電視設(shè)置應(yīng)用使用浮動(dòng)層界面直接添加和顯示界面控件,原因是如 果其用Activity,那么該Activity顯示時(shí)會(huì)遮擋用戶正在使用的Activity,使其進(jìn)入暫停 狀態(tài)(生命周期onPause ()),很多視頻應(yīng)用程序在該狀態(tài)時(shí)會(huì)停止視頻播放,不僅影響用 戶體驗(yàn),而且電視設(shè)置中的圖像設(shè)置選項(xiàng)也無法實(shí)時(shí)看到調(diào)節(jié)效果。畫中畫應(yīng)用顯示一個(gè) 小窗口播放用戶選定的畫中畫子通道信號(hào)源或視頻,該窗口要常駐在屏幕上不受應(yīng)用程序 Activity切換的影響,因此使用浮動(dòng)層界面直接添加和顯示界面控件。語音助手應(yīng)用在響 應(yīng)用戶的語音搜索或語音命令時(shí),會(huì)在屏幕上顯示一個(gè)對(duì)話框,該界面也不是Activity。用 戶能使用到的類似應(yīng)用程序會(huì)有很多,例如360助手、騰訊手機(jī)管家等基于懸浮窗的置頂 界面應(yīng)用。
[0005] 開發(fā)人員為了保證這類非Activity界面的應(yīng)用在前臺(tái)顯示時(shí)不因?yàn)閮?nèi)存緊張而 被內(nèi)存釋放器殺死,一般會(huì)在程序編譯時(shí)強(qiáng)制指定其進(jìn)程為高優(yōu)先級(jí)。例如,在應(yīng)用程序配 置文件AndroidManifest. xml中指定persistent (常駐)屬性,這樣應(yīng)用程序就可以獲得 系統(tǒng)核心進(jìn)程優(yōu)先級(jí)。然而,若不添加常駐屬性,非Activity界面的應(yīng)用會(huì)有前臺(tái)運(yùn)行時(shí) 被殺死的風(fēng)險(xiǎn),添加后又會(huì)影響系統(tǒng)的運(yùn)行效率和內(nèi)存資源,這種常駐屬性的應(yīng)用會(huì)一直 占用內(nèi)存,即使該應(yīng)用處于非活動(dòng)狀態(tài)未在前臺(tái)顯示時(shí)也無法被操作系統(tǒng)釋放內(nèi)存,使系 統(tǒng)總的可用內(nèi)存減少,增加了系統(tǒng)內(nèi)存緊張的概率,不適用于低內(nèi)存的嵌入式系統(tǒng)。綜上所 述,沒有一種技術(shù)能夠?qū)崿F(xiàn)在對(duì)非Activity界面的應(yīng)用進(jìn)程的優(yōu)先級(jí)進(jìn)行調(diào)整的方法,以 避免非Activity界面的應(yīng)用在前臺(tái)顯示時(shí)因?yàn)閮?nèi)存緊張而被內(nèi)存釋放器殺死,或者將非 Activity界面的應(yīng)用進(jìn)程的優(yōu)先級(jí)設(shè)置為常駐屬性時(shí)造成的對(duì)系統(tǒng)內(nèi)存資源的浪費(fèi)。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的實(shí)施例提供一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整方法及裝置,能夠?qū)崿F(xiàn) 對(duì)非Activity界面的應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)進(jìn)行調(diào)整。
[0007] 第一方面,提供一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整方法,包括:
[0008] 根據(jù)應(yīng)用進(jìn)程的名稱監(jiān)聽?wèi)?yīng)用進(jìn)程在操作系統(tǒng)顯示框架服務(wù)內(nèi)部的窗口 Window, 其中所述應(yīng)用進(jìn)程為非Activity界面的應(yīng)用進(jìn)程;
[0009] 根據(jù)所述window的變化狀態(tài)設(shè)置所述應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí),以便根據(jù)所 述優(yōu)先級(jí)進(jìn)行內(nèi)存釋放。
[0010] 第二方面,提供一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整裝置,包括:
[0011] 監(jiān)聽單元,用于根據(jù)應(yīng)用進(jìn)程的名稱監(jiān)聽?wèi)?yīng)用進(jìn)程在操作系統(tǒng)顯示框架服務(wù)內(nèi)部 的窗口 Window,其中所述應(yīng)用進(jìn)程為非Activity界面的應(yīng)用進(jìn)程;
[0012] 調(diào)整單元,用于根據(jù)所述window的變化狀態(tài)設(shè)置所述應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先 級(jí),以便根據(jù)所述優(yōu)先級(jí)進(jìn)行內(nèi)存釋放。
[0013] 本發(fā)明的實(shí)施例提供的應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整方法及裝置,由于在 Android系統(tǒng)中應(yīng)用進(jìn)程的軟件界面在操作系統(tǒng)顯示框架服務(wù)內(nèi)部可以由多層window和 多個(gè)window組成,而本申請(qǐng)?zhí)峁┑姆桨改軌蚋鶕?jù)應(yīng)用進(jìn)程的名稱監(jiān)聽?wèi)?yīng)用進(jìn)程在操作系 統(tǒng)顯示框架服務(wù)內(nèi)部的窗口 Window ;從而根據(jù)window的變化狀態(tài)設(shè)置應(yīng)用進(jìn)程內(nèi)存釋放 的優(yōu)先級(jí),具體當(dāng)window的狀態(tài)發(fā)生變化時(shí),可以根據(jù)window的變化狀態(tài)提高或降低該應(yīng) 用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí),以便操作系統(tǒng)根據(jù)該應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)按照標(biāo)準(zhǔn)的內(nèi) 存釋放算法殺死低優(yōu)先級(jí)的應(yīng)用進(jìn)程已釋放內(nèi)容,在上述過程中通過本申請(qǐng)?zhí)峁┑姆桨笇?shí) 現(xiàn)了對(duì)非Activity界面的應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)進(jìn)行調(diào)整。
【附圖說明】
[0014] 為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0015] 圖1為本發(fā)明的實(shí)施例提供的一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整方法的流程 示意圖;
[0016] 圖2為本發(fā)明的另一實(shí)施例提供的一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整方法的 流程示意圖;
[0017] 圖3為本發(fā)明的實(shí)施例提供的一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整裝置的結(jié)構(gòu) 示意圖;
[0018] 圖4為本發(fā)明的另一實(shí)施例提供的一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整裝置的 結(jié)構(gòu)示意圖;
[0019] 圖5為本發(fā)明的又一實(shí)施例提供的一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整裝置的 結(jié)構(gòu)示意圖;
[0020] 圖6為本發(fā)明的再一實(shí)施例提供的一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整裝置的 結(jié)構(gòu)示意圖;
[0021] 圖7為本發(fā)明的另一實(shí)施例提供的一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整裝置的 結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0022] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0023] 本發(fā)明的實(shí)施例提供一種應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí)調(diào)整方法,參照?qǐng)D1所示, 包括如下步驟:
[0024] 101、根據(jù)應(yīng)用進(jìn)程的名稱監(jiān)聽?wèi)?yīng)用進(jìn)程在操作系統(tǒng)顯示框架服務(wù)內(nèi)部的窗口 Window0
[0025] 其中,步驟101中提到的應(yīng)用進(jìn)程為非Activity界面的應(yīng)用進(jìn)程;非Activity界 面的應(yīng)用進(jìn)程只占全部應(yīng)用進(jìn)程的一部分,因此在執(zhí)行步驟101之前必須先確定哪些應(yīng)用 進(jìn)程為非Activity界面的應(yīng)用進(jìn)程,避免對(duì)全部應(yīng)用進(jìn)程進(jìn)行處理降低效率,具體的,操 作系統(tǒng)中使用應(yīng)用進(jìn)程名稱字符串來唯一標(biāo)識(shí)應(yīng)用進(jìn)程,因此在產(chǎn)品預(yù)置的應(yīng)用程序中可 以通過應(yīng)用進(jìn)程名稱字符串區(qū)分此類進(jìn)程。
[0026] 102、根據(jù)window的變化狀態(tài)設(shè)置應(yīng)用進(jìn)程內(nèi)存釋放的優(yōu)先級(jí),以便根據(jù)該優(yōu)先 級(jí)進(jìn)行內(nèi)存釋放。
[0027] 對(duì)于在Android系統(tǒng)的應(yīng)用進(jìn)程管理和顯示管理框架,以及各種顯