目錄:
? ? 1.建議
????2.知識點
? ? 3.Dagger2使用篇
? ? 4.Retrofit+RxJava+OkHttp -封裝篇
建議:
(1).使用Gradle和它推薦的工程
(2).密碼和敏感數(shù)據(jù)最好放在gradle.properties中
(3).不要自己寫Http客戶端劳跃,使用Volley或者OkHttp庫
(4).使用Fragments來呈現(xiàn)ui視圖
(5).使用Activities只是為了來管理Fragments
(6).Layout布局是xmls代碼,需要組織好
(7).在layout的xmls布局是,使用styles文件來避免寫重復(fù)的屬性
(8).要使用多個style文件跨蟹,避免出現(xiàn)單一的大的style文件
(9).保持colors.xml簡短,只是定義調(diào)色板
(10).不做一個深層次的ViewGroup
(11).只是用WebView的時候避免在客戶端做處理圣勒,當(dāng)心內(nèi)存泄漏
(12).使用Robolectric單元測試循榆,Robotium做ui測試
(13).使用Genymotion作為模擬器
(14).用ProGuard和DexGuard來混淆項目
android SDK
Android sdk 放在home目錄或者其他app無關(guān)的位置,因為在安卓有些包含SDK的IDE的時候,可能火把SDK放在IDE同一目錄下液样,當(dāng)年你需要升級或者重新安裝的時候,會比較麻煩巧还。如果IDE是普通用戶下運行鞭莽,而不是在root下運行,還需要避免吧SDK放到需要studo權(quán)限的系統(tǒng)級別目錄下麸祷。
Gradle配置
不要在build.gradle中定義sigingConfigs澎怒,因為會出現(xiàn)在版本控制中,重新建立一個不加人版本控制系統(tǒng)的gradle.properties文件
使用Maven依賴方式替代使用jar包方案如果項目中明確使用jar文件阶牍,那么為了避免成為固定版本喷面,下載jar包來更新很繁瑣星瘾,可以定義成Maven形式。然后會自動升級到指定的最新版本
Activities and Fragments
實現(xiàn)ui界面的時候惧辈,F(xiàn)ragments應(yīng)該作為默認選擇琳状。可以重復(fù)使用Fragements用戶接口來組合成你的應(yīng)用盒齿,強烈推薦使用Fragments而不是activity來呈現(xiàn)ui界面:
(1)使用多窗格布局解決方案:Fragments的引入主要將手機應(yīng)用內(nèi)引申到平板電腦念逞,所以在平板上面可能有A,B兩個窗格,但是在手機應(yīng)用上A.B可能分別充滿整個屏幕边翁。所以在起初就用fragments的話翎承,會方便以后的屏幕適配。
(2)屏幕間數(shù)據(jù)通信:從一個Activity發(fā)送復(fù)雜數(shù)據(jù)(例如Java對象)到另外一個Activity符匾,Android的API并沒有提供合適的方法审洞。不過使用Fragment,你可以使用 一個activity實例作為這個activity子fragments的通信通道待讳。即使這樣比Activity與Activity間的通信好芒澜,你也想考慮使用Event Bus架構(gòu),使用如?Otto?或者?greenrobot EventBus作為更簡潔的實現(xiàn)创淡。 如果你希望避免添加另外一個類庫痴晦,RxJava同樣可以實現(xiàn)一個Event Bus。
(3)Fragments 一般通用的不只有UI:你可以有一個沒有界面的fragment作為Activity提供后臺工作琳彩。 進一步你可以使用這個特性來創(chuàng)建一個fragment 包含改變其它fragment的邏輯?而不是把這個邏輯放在activity中誊酌。
(4)ActionBar可以使用內(nèi)部fragment來管理:你可以選擇使用一個沒有UI界面的fragment來專門管理ActionBar,或者你可以選擇使用在每個Fragment中 添加它自己的action 來作為父Activity的ActionBar.
但是也不能濫用嵌套的fragments,因為可能會引起?matryoshka bugs。在架構(gòu)一個app框架的時候露乏,應(yīng)該有一個頂級的activity來包含絕大部分業(yè)務(wù)相關(guān)的fragment碧浊。也可以有一些輔助的activity,輔助activity通信可以很簡單限制在這兩種方法?Intent.setData()?或?Intent.setAction()或類似的方法瘟仿。
資源文件 Resources
命名 :遵循前綴表面類型的習(xí)慣箱锐,例如type_foor_bar.xml
組織布局文件:
? ? 每一個屬性一行,縮進四個空格
? ? android:id作為第一個屬性
? ? android:layout_ 屬性在上邊
? ? style 屬性在底部
應(yīng)該使用styles幾乎每個項目都需要適當(dāng)?shù)氖褂胹tyle文件劳较,因為對于一個視圖來說有一個重復(fù)的外觀是很常見的驹止。
可以將一個大的style文件分割成多個文件? 可以有多個styles.xml文件,Android SDK支持其他文件观蜗,style這個文件名稱并沒有起作用臊恋,起作用的在文件里的<style>標簽。
colors.xml是一個調(diào)色板? 在你的colors.xml文件中應(yīng)該只是映射顏色的名稱的一個RGBA值墓捻,沒有其它的抖仅。避免重復(fù)定義RGBA值,這使如果需要改變基本色變的很復(fù)雜。同時撤卢,這些定義是更環(huán)境關(guān)聯(lián)起來的环凿,如button或者comment,應(yīng)該放到一個按鈕風(fēng)格中凸丸,而不是在color.xml拷邢。
避免深層次的視圖結(jié)構(gòu) 有時候為了擺放一個視圖袱院,可能嘗試添加另外一個LinearLayout屎慢。
Android中的命名規(guī)范:?1.包名:使用反域名,全部使用小寫字母忽洛;2.類:名詞腻惠,采用大駝峰命名(又稱帕斯卡命名法),盡量避免縮寫欲虚,除非是公認的集灌。如HTML,URL;3.接口:大駝峰命名;4.方法和變量:小駝峰命名法(駝峰命名)5.常量: 全部大寫复哆,下劃線命名欣喧;6.資源文件:全部小寫,采用下劃線命名法梯找。7.資源布局文件(xml文件)全部小寫唆阿,采用下劃線命名法;8.資源id:小駝峰锈锤;9.layout中的id驯鳖,view縮寫_模塊名稱_view邏輯名稱
開發(fā)模式(mvc和mvp):
對比MVC和MVP模式來說:mvc模式容易造成Activity或者Fragment里面的代碼越來越臃腫。
MVC模式:View:布局的xml文件Controller:Activity久免、Fragment浅辙、Dialog等;Model:相關(guān)的業(yè)務(wù)操作處理數(shù)據(jù)(如對數(shù)據(jù)庫的操作阎姥、對網(wǎng)絡(luò)等的操作都應(yīng)該在Model層里)
MVP模式:View:Activity记舆、Fragment、Dialog呼巴、Adapter等氨淌,該層不包含任何業(yè)務(wù)邏輯;Presenter:中介伊磺,View 與 Model 不發(fā)生聯(lián)系盛正,都通過 Presenter 傳遞;Model:相關(guān)的業(yè)務(wù)操作處理數(shù)據(jù)(如對數(shù)據(jù)庫的操作屑埋、對網(wǎng)絡(luò)等的操作都應(yīng)該在Model層里)
MVP開發(fā)模式豪筝,便于后期的維護。
在使用第三方依賴庫的時候,需要學(xué)會封裝续崖,抽象的依賴第三方框架敲街。以便于實現(xiàn)低耦合。
知識點:
? ? JAVA反射機制:JAVA反射機制在運行狀態(tài)中對于任意一個實體類严望,都能夠知道這個類的所有屬性和方法多艇;對于任意一個對象,都能夠調(diào)用它的任意方法和屬性像吻,這種動態(tài)獲取信息以及調(diào)用對象方法的功能稱為java語言的反射機制峻黍。
Dagger2
(1)基于JAVA注解來實現(xiàn)的在完全編譯階段完成依賴注入的開源庫,主要用于模塊姐解耦拨匆,提高代碼的健壯性和可維護性姆涩。
(2)實現(xiàn)有三種方式? :1、構(gòu)造注入惭每;2骨饿、接口注入;3台腥、注解注入(推薦使用宏赘,因為前面兩種都需要寫大量代碼,這一種只需要 “@Inject”即可)
(3)目的:最主要 為了解耦黎侈,達到高內(nèi)聚察署,低耦合的目的,保證代碼的健壯性蜓竹,靈活性和可維護性箕母。
(4)主要用法:@Inject, @Module, @Provides, @Component, @Qulifier, @Scope, @Singleten
Retrofit+RxJava+OkHttp -封裝篇
1.創(chuàng)建一個統(tǒng)一的生成接口實例的管理類
2.創(chuàng)建接口,通過第一步獲取實例
3.創(chuàng)建一個業(yè)務(wù)Loader,如xxxLoader,獲取并處理相關(guān)業(yè)務(wù)
4.Activity/Fragment中調(diào)用
5.統(tǒng)一處理結(jié)果和錯誤
6.添加公共參數(shù)
(Demo:https://github.com/pinguo-zhouwei/RetrofitRxJavaDemo)