Windows Phone開發(fā)人員七宗罪之暴食
譯文暴食是什么?
所謂暴食,是指人類表現(xiàn)出的超出自身所需的強(qiáng)烈欲望。
產(chǎn)生原因:據(jù)說襁褓中的嬰兒如果斷奶不當(dāng),就會產(chǎn)生對食物的極端依賴。
暴食如何影響Windows Phone的開發(fā)工作?
——縱容無度、虛耗資源
這個世界永遠(yuǎn)不缺乏技術(shù)類產(chǎn)品,它們隨著時間的推移不斷涌現(xiàn),并變得更新、更快且功能更強(qiáng),越來越聰明的同時也越來越吻合個人需求。如今的平板設(shè)備及臺式機(jī)在計算性能與存儲能力方面,已經(jīng)不輸于幾年之前的超級計算機(jī)。而在我看來,這一切利好因素非但沒有令整個IT行業(yè)有所提升,反而導(dǎo)致軟件開發(fā)商愈發(fā)好逸惡勞。時至今日,我們不必再為性能表現(xiàn)擔(dān)憂,反正硬件已經(jīng)足夠強(qiáng)大,再繁重的任務(wù)也帶得起來。
移動開發(fā)工作在這方面則堪稱軟件行業(yè)的表率。由于智能手機(jī)的尺寸規(guī)格受限,它們在性能上不可能做到游刃有余,因此在編寫代碼時就要充分考慮到這些局限以保障成品的運(yùn)行效率。我們需要在性能優(yōu)化工作上多花心思,因?yàn)橐坏┛D或拖慢情況出現(xiàn),糟糕的使用體驗(yàn)會令我們很快失去用戶。在本文中,我將跟大家一起聊聊Windows Phone開發(fā)人員應(yīng)該如何在生態(tài)系統(tǒng)的開發(fā)工作中避免暴食帶來的不利影響。
資源:毫無節(jié)制地占有手機(jī)資源是應(yīng)用程序開發(fā)的大忌。Windows Phone系統(tǒng)團(tuán)隊的工作者們在如何令核心操作系統(tǒng)更加精簡高效方面投入了大量時間和精力,但一切努力在對資源索求無度的應(yīng)用程序面前都顯得軟弱無力。首先,請大家務(wù)必確保自己的產(chǎn)品在運(yùn)行過程中不會占用太多內(nèi)存,只有這樣“芒果”系統(tǒng)才會在進(jìn)行多任務(wù)/快速應(yīng)用切換操作時始終讓我們的程序駐留在設(shè)備內(nèi)存當(dāng)中。托管代碼是解決問題的好辦法,但注意避免任何不必要的占用狀態(tài)或者庫引用。最好別使用太多第三方工具包,尤其是杜絕類似功能重復(fù)載入的弊病。除此之外,雖然動畫能提升使用體驗(yàn)并充分發(fā)揮Metro的固有優(yōu)勢,但使用過多引發(fā)的資源占用也會令用戶反感。我就遇上過由于個性化動畫太多,相關(guān)第三方工具令默認(rèn)手機(jī)應(yīng)用框架(用于處理XAML頁面)在切換時對資源需求過高,最終引發(fā)嚴(yán)重的系統(tǒng)拖慢現(xiàn)象——當(dāng)然,這可能是個別情況,但重點(diǎn)在于大家需要清楚了解哪些元素值得保留、而哪些應(yīng)該放棄。根據(jù)優(yōu)先級別列出一張清單,能夠有效幫助我們調(diào)整設(shè)備的性能表現(xiàn)。
線程:作為開發(fā)人員,相信我不必再提醒大家為自己的平板/智能手機(jī)應(yīng)用程序鎖定用戶界面(UI)線程了。雖然有時候我們只是在用手機(jī)計算人數(shù)或者清點(diǎn)賬目,但應(yīng)用程序UI需要始終處于響應(yīng)狀態(tài)。為了實(shí)現(xiàn)這一點(diǎn),大多數(shù)Silverlight類編程建議我們以異步方式應(yīng)對這類繁重的處理任務(wù)。也就是說在實(shí)際處理、動畫及UI線程自動合并等工作中,合理使用后臺線程配置功能。在必要的時候,我們完全可以建立一項(xiàng)單獨(dú)的后臺任務(wù)作為輔助?,F(xiàn)實(shí)是殘酷的,但大家不要灰心,畢竟Async CTP已經(jīng)能夠起到作用。等到將來它完全就緒后,我們將可以徹底告別煩人的Dispatcher,BeginInvoke()或者DownloadCompleted()APM/EAP模塊。到那個時候,只需啟用async-await(異步喚醒)功能,即可輕松幫助設(shè)備避免同時執(zhí)行多個任務(wù)的窘境。
緩存:只要有可能,把一切東西都塞進(jìn)緩存就對了,這能有效防止相同的網(wǎng)絡(luò)HTTP被調(diào)用兩次。這一點(diǎn)對于圖像/平面類數(shù)據(jù)尤其適用。目前已經(jīng)有許多產(chǎn)品,能夠以隔離存儲的形式為手機(jī)節(jié)省資源,大家感興趣的話可以多加關(guān)注。
運(yùn)行模型:現(xiàn)在大家已經(jīng)知道Windows Phone “芒果”支持通過內(nèi)存中的應(yīng)用程序后臺堆棧實(shí)現(xiàn)快速切換功能,但這并不代表微軟原先采用的這套墓碑機(jī)制就完全不用擔(dān)心了。顯然,我們不能隨便寫出一款資源需求量巨大的應(yīng)用程序,然后指望著它能夠長期駐留在內(nèi)存當(dāng)中。要完全從墓碑機(jī)制的“偽多任務(wù)”陰影中走出來,我們還需要下一番苦功。在這里向大家推薦另一篇文章,希望能給各位帶來些啟示。
警告/提示:現(xiàn)在我們可以利用新的API創(chuàng)建警告/提示信息,這當(dāng)然不錯;不過也別過分依賴這套新機(jī)制。要知道提示信息的上限為50條,如果用戶未能及時清理或查看這些消息,接近容量上限的情況很可能引發(fā)大麻煩。
使用API:新的日程表及聯(lián)系人API非常貼心,對吧?不過再次提醒大家,擁有權(quán)利同時意味著承擔(dān)責(zé)任。最好不要在用戶無法選擇的情況下濫用這些機(jī)制,這種忽略使用者感受的做法很可能讓我們的應(yīng)用程序面臨卸載或者口碑極差的危機(jī)。
好了,這就是本文要談的內(nèi)容??偨Y(jié)起來就是一句話:不要因?yàn)槲覀兡苓@么做,就不假思索地選擇這么做。請大家隨時關(guān)注《Windows Phone開發(fā)人員七宗罪》系列文章的第七篇。
原文標(biāo)題:7 Deadly Sins for Windows Phone Developers: Gluttony 核子可樂譯
原文鏈接:http://mobile.dzone.com/articles/7-deadly-sins-windows-phone-4
【編輯推薦】