挖掘256MB內(nèi)存的余地:開發(fā)者急需鉆研應(yīng)用優(yōu)化
針對(duì)該問題Windows Phone團(tuán)隊(duì)詳細(xì)列出了應(yīng)用優(yōu)化指南,幫助開發(fā)者高效的實(shí)現(xiàn)針對(duì)不同版本W(wǎng)indows Phone的應(yīng)用優(yōu)化,具體應(yīng)用優(yōu)化方案包括以下幾個(gè)方面:
優(yōu)化啟動(dòng)時(shí)間
確保應(yīng)用的啟動(dòng)時(shí)間能夠大幅度縮減,開發(fā)者在應(yīng)用渲染完成之前盡可能的延緩其他用戶動(dòng)作發(fā)生的可能性。這就意味著開發(fā)者需要最小化App/Page框架下的代碼并且保持Launching/OnNavigatedTo 用戶動(dòng)作最小化。
例如應(yīng)用初始化將會(huì)花費(fèi)一定的時(shí)間或者依賴網(wǎng)絡(luò)相應(yīng)以及文件的輸入或輸出,那么開發(fā)者可以利用進(jìn)度條的形式來(lái)傳達(dá)動(dòng)作信息,同時(shí)在不影響頁(yè)面布局的情況下調(diào)整系統(tǒng)托盤不透明度為0以利用系統(tǒng)托盤ProgressIndicator 來(lái)保證最佳性能。
當(dāng)原始框架渲染完成,在異步操作未完成的情況下開發(fā)者可以利用獨(dú)立的存儲(chǔ)操作來(lái)阻塞UI線程的調(diào)用,確保調(diào)用異步來(lái)保證啟動(dòng)時(shí)用戶界面的快速響應(yīng)。
由于Frame是由操作系統(tǒng)本身繪制并作為啟動(dòng)序列的一部分,因而可以適度增加閃屏來(lái)延長(zhǎng)啟動(dòng)時(shí)間。此外還可以通過從頁(yè)面中簡(jiǎn)化和去除不必要的XAML以減少受XAML分析的影響,也可以顯著延長(zhǎng)啟動(dòng)。
減少內(nèi)存使用
在資質(zhì)認(rèn)證頁(yè)面5.2.5中明確提到在低端設(shè)備中應(yīng)用的內(nèi)存使用量不得超過90MB,隨著像Lumia 610這樣的設(shè)備上市,這些優(yōu)化工作將會(huì)顯得至關(guān)重要。
開發(fā)者可以利用內(nèi)存分析器和相關(guān)API來(lái)分析應(yīng)用程序的內(nèi)存使用情況。其首要基本原則為保證在用戶需要的時(shí)候進(jìn)行內(nèi)存處理,以替代在啟動(dòng)界面預(yù)先加載應(yīng)用數(shù)據(jù)。例如,根據(jù)需求加載頁(yè)面的數(shù)據(jù),在內(nèi)容改變時(shí)再進(jìn)行刷新數(shù)據(jù)而不是一味的進(jìn)行全局?jǐn)?shù)據(jù)的加載。
注意內(nèi)存泄漏,例如用戶在使用Win鍵切換至主屏幕時(shí)應(yīng)用并未瑞出,這樣就會(huì)出現(xiàn)一個(gè)循環(huán)的導(dǎo)航切換功能,駐留在內(nèi)存當(dāng)中,當(dāng)用戶利用多任務(wù)進(jìn)行切換時(shí)很可能會(huì)導(dǎo)致應(yīng)用由于內(nèi)存不足而崩潰的現(xiàn)象。為了避免這種循環(huán)導(dǎo)航的出現(xiàn),開發(fā)者可以替換掉Win鍵的功能或者利用Windows Phone 7.5提供的會(huì)展操作API來(lái)解決該問題。
此外,還要確保圖像使用效率,因?yàn)楫?dāng)應(yīng)用程序加載高分辨率圖像到UI界面然后通過縮放來(lái)適應(yīng)較小的Container容器,也將會(huì)消耗更多的內(nèi)存。
處理性能下調(diào)
為了保證前臺(tái)256MB內(nèi)存的釋放,通用的后臺(tái)代理(PeriodicTasks/ResourceIntensiveTasks)將不可用。
當(dāng)前Windows Phone終端用戶可以再設(shè)置選項(xiàng)里面手動(dòng)關(guān)閉后臺(tái)功能,當(dāng)后臺(tái)代理超過限額時(shí),操縱系統(tǒng)將自動(dòng)終結(jié)后臺(tái)應(yīng)用,這些功能都是通過InvalidOperationException來(lái)實(shí)現(xiàn)的,因而開發(fā)者有必要針對(duì)Tango設(shè)備對(duì)該功能進(jìn)行調(diào)整。
按照上面給出的思路來(lái)禁用掉上述功能以確保應(yīng)用的用戶體驗(yàn)最大限度的不受影響,從而在低端設(shè)備正常發(fā)揮其性能和特征,開發(fā)者可以給予最新版的SDK7.1.1進(jìn)行debug。
此外,開發(fā)者如果希望通過減少/修改功能,以便于在低端設(shè)備上的內(nèi)存需求,可以使用WebBrowserTask和BingMapsTask來(lái)替代內(nèi)存密集型的WebBrowser和Map控件。例如,可以卸載應(yīng)用程序中占用本地內(nèi)存的進(jìn)程,避免在人機(jī)交互過程中內(nèi)存不足而導(dǎo)致應(yīng)用崩潰的現(xiàn)象。的
用戶輸入響應(yīng)
用戶總是希望應(yīng)用程序界面能夠反應(yīng)靈敏,因而保持UI線程的的動(dòng)作在不需要的情況下盡可能的處于凍結(jié)狀態(tài)則顯得非常必要。
為了保證頁(yè)面加載時(shí)間,在應(yīng)用被完全渲染之前延緩加載時(shí)間同樣至關(guān)重要,此外,利用TiltEffect的確認(rèn)用戶輸入也將使應(yīng)用程序的外觀和感覺具備原生應(yīng)用程序的用戶體驗(yàn)。
許多開發(fā)者在應(yīng)用程序通過添加頁(yè)面過渡動(dòng)畫,來(lái)延緩加載時(shí)間,這是一個(gè)非常值得推薦的做法,但是如果過度畫面會(huì)影響到應(yīng)用程序的穩(wěn)定性時(shí),開發(fā)者則需要將其禁用,尤其是針對(duì)低端設(shè)備,這樣可以顯著的提高應(yīng)用程序的性能。
總結(jié)
通過上述優(yōu)化指南,開發(fā)者可以輕易地保證用戶能夠獲得良好的用戶體驗(yàn),而這些簡(jiǎn)單的優(yōu)化并不僅僅針對(duì)低端設(shè)備,同樣對(duì)于當(dāng)前的Windows Phone設(shè)備一樣可以獲得良好的用戶體驗(yàn)。同時(shí),合理的利用256MB的SDK工具也將會(huì)使得開發(fā)者的優(yōu)化工作更為高效。
【編輯推薦】