IT之家4月18日消息,谷歌(GOOG)開(kāi)發(fā)者博客昨日(4月17日)發(fā)布博文,宣布在安卓17Beta4更新中,計(jì)劃主動(dòng)終止占用資源過(guò)高的應(yīng)用,強(qiáng)制執(zhí)行設(shè)備級(jí)內(nèi)存限制與異常檢測(cè)服務(wù)。
在安卓17Beta4更新中,谷歌(GOOG)為了進(jìn)一步優(yōu)化設(shè)備性能,引入基于設(shè)備總內(nèi)存的應(yīng)用內(nèi)存限制機(jī)制。這一機(jī)制旨在通過(guò)設(shè)定確定性的內(nèi)存邊界,解決因個(gè)別應(yīng)用內(nèi)存失控導(dǎo)致的系統(tǒng)級(jí)不穩(wěn)定問(wèn)題。該機(jī)制會(huì)實(shí)時(shí)監(jiān)控異常服務(wù),強(qiáng)制終止超出基準(zhǔn)線的應(yīng)用,倒逼開(kāi)發(fā)者優(yōu)化臃腫軟件,解決卡頓問(wèn)題。
在之前的安卓版本中,應(yīng)用可使用的內(nèi)存上限主要受限于largeHeap屬性以及系統(tǒng)整體的內(nèi)存壓力(LMK-Low Memory Killer機(jī)制)。
這種模式雖然靈活,但容易導(dǎo)致“劣幣驅(qū)逐良幣”,單個(gè)內(nèi)存泄露嚴(yán)重的應(yīng)用可能占用過(guò)多資源,導(dǎo)致系統(tǒng)頻繁殺后臺(tái)、UI卡頓甚至整機(jī)重啟。
IT之家援引博文介紹,在安卓17系統(tǒng)中,系統(tǒng)根據(jù)設(shè)備的物理內(nèi)存總量,為應(yīng)用設(shè)定了明確的內(nèi)存使用上限。
在安卓17Beta4階段,谷歌(GOOG)限制設(shè)定較為保守,主要目標(biāo)是建立系統(tǒng)基線,精準(zhǔn)打擊“極端內(nèi)存泄漏”和“異常值”應(yīng)用,當(dāng)應(yīng)用的內(nèi)存占用觸及該上限后,系統(tǒng)將介入干預(yù),防止其繼續(xù)分配內(nèi)存。
為協(xié)助開(kāi)發(fā)者排查內(nèi)存問(wèn)題,Android Studio Panda版本在性能分析器中集成了LeakCanary任務(wù),并提供基于觸發(fā)器的性能分析功能,可在應(yīng)用觸發(fā)內(nèi)存限制或檢測(cè)到異常行為時(shí)自動(dòng)收集堆轉(zhuǎn)儲(chǔ)數(shù)據(jù)。
當(dāng)應(yīng)用因觸及內(nèi)存限制被終止后,系統(tǒng)會(huì)在ApplicationExitInfo的getDescription()方法中返回字符串標(biāo)識(shí)MemoryLimiter。開(kāi)發(fā)者可以通過(guò)監(jiān)聽(tīng)此標(biāo)識(shí),快速判斷應(yīng)用崩潰是否源于新的內(nèi)存限制策略。
Android Studio Profiler中的LeakCanary任務(wù)
該機(jī)制的核心目標(biāo)是創(chuàng)造更穩(wěn)定、更確定的運(yùn)行環(huán)境,阻斷因單個(gè)應(yīng)用內(nèi)存溢出引發(fā)的系統(tǒng)連鎖反應(yīng)(如System UI重啟、設(shè)備發(fā)熱),官方預(yù)計(jì)絕大多數(shù)合規(guī)應(yīng)用不會(huì)受到此限制的影響,主要影響對(duì)象為存在嚴(yán)重內(nèi)存泄漏或過(guò)度優(yōu)化的異常應(yīng)用。
