Android作為目前互聯(lián)網(wǎng)領(lǐng)域的熱門(mén)架構(gòu)系統(tǒng),其發(fā)展一直在業(yè)內(nèi)保持著很高的熱度。那么技術(shù)人員在Android構(gòu)建應(yīng)用程序的過(guò)程中應(yīng)該注意哪些問(wèn)題呢?中培偉業(yè)《Android APP開(kāi)發(fā)架構(gòu)應(yīng)用實(shí)戰(zhàn)》專(zhuān)家隋老師根據(jù)自己多年的從業(yè)經(jīng)驗(yàn),在這里就Android構(gòu)建應(yīng)用程序應(yīng)注意的有關(guān)問(wèn)題進(jìn)行了詳細(xì)介紹。隋老師指出,在構(gòu)建 Android應(yīng)用程序的過(guò)程中,應(yīng)該注意以下問(wèn)題:
1、添加使用第三方依賴(lài)庫(kù)前,請(qǐng)?jiān)偃伎迹^對(duì)是一個(gè)慎重的決定;
2、如果用戶看不見(jiàn)有些界面, 請(qǐng)一定不要繪制它!;
3、除非真的需要,否則不要使用數(shù)據(jù)庫(kù);
4、應(yīng)用程序中 65k 方法數(shù)的限制很快就能達(dá)到,我意思是真的很快!不過(guò) multidexing 能拯救你;
5、RxJava 是對(duì) AsyncTask 和其它異步任務(wù)類(lèi) 最好的替代品;
6、Retrofit是目前 android 最好的處理網(wǎng)絡(luò)事務(wù)的依賴(lài)庫(kù)
7、使用 Retrolambda 來(lái)精簡(jiǎn)你的代碼;
8、把 RxJava 與 Retrofit 和 Retrolambda 整合在一起 來(lái)達(dá)到最佳效果!;
9、EventBus 非常好用, 但是我不會(huì)使用太多因?yàn)樗鼤?huì)讓代碼庫(kù)變得更混亂;
10、按照應(yīng)用功能來(lái)封裝,而非所屬類(lèi)別;
11、把每一個(gè)事務(wù)都從應(yīng)用程序主線程移除;
12、lint 這個(gè)工具能幫助優(yōu)化你的界面和層級(jí),所以你能識(shí)別出哪些是可能被移除的重復(fù)13、如果你正在用 gradle , 盡你所能加速它的執(zhí)行效率;
14、執(zhí)行一個(gè) Profile report / 構(gòu)建分析報(bào)告 來(lái)檢查下構(gòu)建的過(guò)程中時(shí)間都花費(fèi)在哪里了;
15、使用一個(gè) 眾所周知的代碼架構(gòu);
16、測(cè)試會(huì)花費(fèi)很多時(shí)間,一旦你被某個(gè)問(wèn)題困住,你就會(huì)明白有了測(cè)試用例會(huì)讓你提高開(kāi)發(fā)效率并且增加應(yīng)用程序的健壯性。 ;
17、請(qǐng)使用 依賴(lài)注入來(lái)使你的應(yīng)用程序更模塊化,因此它也更加容易被測(cè)試;
18、收聽(tīng) Fragmented 播客 會(huì)大大幫助你;
19、永遠(yuǎn)不要 使用你的個(gè)人 email 作為 android 應(yīng)用發(fā)布市場(chǎng)的賬號(hào)名;
20、請(qǐng)一直使用 合適的 輸入類(lèi)型;
21、使用 Analytics 來(lái)查找可用的模式和分離 bug;
22、保持最新的 依賴(lài)庫(kù)(使用 dryrun 來(lái)更快的測(cè)試他們);
23、你的服務(wù)應(yīng)該盡快執(zhí)行所需要的任務(wù)并且及時(shí)被終止;
24、使用 Account Manager來(lái)提示登錄的用戶名和 email 地址;
25、使用 CI (持續(xù)集成) 來(lái)構(gòu)建和分發(fā)你的測(cè)試和生產(chǎn)環(huán)境的 apk;
26、請(qǐng)不要建立和運(yùn)行你自己的 CI 服務(wù)器,維護(hù)這個(gè)服務(wù)器是很耗時(shí)的,因?yàn)闀?huì)有磁盤(pán)空間問(wèn)題,磁盤(pán)安全性問(wèn)題 / 升級(jí)服務(wù)器來(lái)避免來(lái)自 SSL 漏洞的攻擊,等等。可以使用 circleci,travis,shippable,他們不是很貴并且只需要關(guān)注價(jià)格就行;
27、使用 playstore 來(lái)自動(dòng)化你的發(fā)布過(guò)程;
28、如果一個(gè)依賴(lài)庫(kù)很龐大并且你只是使用其中一小部分的功能,你應(yīng)該考慮一些其他更精簡(jiǎn)的選擇 (比如可以依賴(lài) proguard);
29、不要使用你不需要的模塊。如果那個(gè)模塊并不需要常常修改,考慮從零開(kāi)始構(gòu)建的時(shí)間是很重要的(使用 CI 構(gòu)建就是一個(gè)很好的例子),或者檢查之前那個(gè)單獨(dú)構(gòu)建的模塊是否是最新的,相比起來(lái)只是簡(jiǎn)單的裝載那些二進(jìn)制的 .jar/.aar 依賴(lài)庫(kù),它能帶來(lái) 4 倍的提升;
30、開(kāi)始考慮用 SVG 替換 PNG;
31、如果你只需要改變一個(gè)地方(例如,AppLogger.d(“message”) 能包含 Log.d(TAG, message) 并且之后發(fā)現(xiàn)Timber.d(message) 會(huì)是一個(gè)更好的解決方案),為依賴(lài)庫(kù)制作抽象的類(lèi)會(huì)讓切換到新庫(kù)變得很容易;
32、監(jiān)視連接狀態(tài)和連接的種類(lèi) (在 WIFI 連接狀態(tài)下,是不是有更多的數(shù)據(jù)更新?);
33、監(jiān)視電源和電池 (在充電的過(guò)程中,是不是有更多的數(shù)據(jù)更新? 當(dāng)電池電量低的時(shí)候,更新過(guò)程會(huì)不會(huì)被暫緩);
34、如果一個(gè)笑話是需要解釋才能明白的話,那肯定是一個(gè)失敗的笑話,用戶界面亦是如此;
35、測(cè)試能帶來(lái)性能的提升: 慢工出細(xì)活(并且保證內(nèi)容的正確性),之后驗(yàn)證優(yōu)化,這不會(huì)影響任何測(cè)試內(nèi)容。