March 5th, 2017
Android Weekly Issue #248.
本期內(nèi)容包括: 為什么有時(shí)候應(yīng)該讓你的應(yīng)用崩潰(而不是一味保護(hù)); Trello離線模式實(shí)現(xiàn)中兩個(gè)id的問(wèn)題; 如何讓Dagger的component按照scope保存, 在屏幕旋轉(zhuǎn)時(shí)不重建; 用Dagger構(gòu)建Realm的數(shù)據(jù)庫(kù)遷移邏輯;
利用各種mock工具寫單元測(cè)試; Map上markers的動(dòng)畫實(shí)現(xiàn); JUnit5中@DisplayName的使用; RxJava中的Single和Completable使用; 舉例說(shuō)明如何給FindBugs寫自定義的探測(cè)器; Android中靜態(tài)代碼分析工具的使用; Trello離線實(shí)現(xiàn)中sync失敗情況的處理.
ARTICLES & TUTORIALS
Why your app should crash
作者認(rèn)為有時(shí)候讓應(yīng)用崩潰反而是有好處的.
以NPE為例, 有時(shí)候我們會(huì)習(xí)慣性地加很多null判斷, 有的是多余的, 有的防御型的代碼反而會(huì)掩蓋了真實(shí)問(wèn)題所在. 比如當(dāng)一個(gè)不合理的情況發(fā)生時(shí), 讓用戶看到一個(gè)不可理解的頁(yè)面, 比如空白, 然后我們開(kāi)發(fā)者根本不知道這種情況的發(fā)生.
與其這樣掩蓋錯(cuò)誤, 不如讓應(yīng)用崩潰, 讓開(kāi)發(fā)者立即知道問(wèn)題的原因.
實(shí)用建議:
永遠(yuǎn)讓應(yīng)用對(duì)外來(lái)輸入(比如service的響應(yīng), UI的輸入, 進(jìn)來(lái)的intents)保持健壯性.
在程序的入口點(diǎn)保證數(shù)據(jù)的完整性. 這樣不合理的數(shù)據(jù)就不會(huì)到處都是, 所以你不用到處檢查.
如果你不確定某個(gè)錯(cuò)誤是否會(huì)在某個(gè)地方發(fā)生, 先假裝它不會(huì)發(fā)生, 在測(cè)試階段再驗(yàn)證.
如果某個(gè)方法在產(chǎn)品環(huán)境不能被調(diào)用, 或者只能被調(diào)用一次等, 拋出
IllegalStateExce