Android程序員自我修養(yǎng)
1. Android-Universal-Image-Loader
github地址
https://github.com/nostra13/Android-Universal-Image-Loader
介紹
老牌的圖片異步加載框架
重點(diǎn)
整個(gè)框架分多少個(gè)模塊,每個(gè)模塊的作用是什么
如何僅通過interface就將框架的整個(gè)流程串聯(lián)起來
如何進(jìn)行內(nèi)存管理的,LRU是種什么算法,有沒有比LRU更好的?
用到了多少個(gè)線程池,這些線程池之間的區(qū)別是什么,如果只用一個(gè)線程池可以么?
2. Retrofit
github地址
https://github.com/square/retrofit
介紹
十分簡(jiǎn)潔的網(wǎng)絡(luò)請(qǐng)求框架,底層由okhttp負(fù)責(zé)執(zhí)行網(wǎng)絡(luò)請(qǐng)求。
重點(diǎn)
如何自定義注解
如何將方法轉(zhuǎn)化成Request對(duì)象
ServiceMethod的作用
adapter,converter的設(shè)計(jì)思路,如果想要實(shí)現(xiàn)將okhttp也變成可替換的應(yīng)該如何設(shè)計(jì)代碼
InvocationHandler與泛型的使用
3. Volley
github地址
https://github.com/google/volley
介紹
Google出品的網(wǎng)絡(luò)請(qǐng)求框架
重點(diǎn)
Dispatcher和RequestQueue的設(shè)計(jì)實(shí)現(xiàn)
RetryPolicy 策略模式的實(shí)現(xiàn)
4. Glide
github 地址
https://github.com/bumptech/glide
介紹
Google出品的圖片加載框架
重點(diǎn)
內(nèi)存管理和線程管理的方式,engine的作用
如何利用生命周期來控制加載的暫停與恢復(fù)
如何處理帶優(yōu)先級(jí)的請(qǐng)求
各個(gè)模塊、類、方法等職責(zé)劃分以及命名習(xí)慣,代碼規(guī)范等
5.Tinker
github地址
https://github.com/Tencent/tinker
介紹
騰訊出品的熱更新框架
重點(diǎn)
實(shí)現(xiàn)原理,如何實(shí)現(xiàn)的補(bǔ)丁dex替換
如何實(shí)現(xiàn)plugin
文件有效性校驗(yàn)的方式
dex合成
6. Android-Architecture
github地址
https://github.com/googlesamples/android-architecture/tree/master
介紹
Google出品的架構(gòu)介紹
重點(diǎn)
各個(gè)架構(gòu)的實(shí)現(xiàn)方式以及特點(diǎn)
如何在各個(gè)架構(gòu)下做單元測(cè)試
7. OkHttp
github地址
https://github.com/square/okhttp
介紹
應(yīng)該是Android開發(fā)使用最廣泛的網(wǎng)絡(luò)框架了
重點(diǎn)
如何自建socket發(fā)送數(shù)據(jù)
連接池怎么復(fù)用連接的
websocket的流程,心跳的處理,建立長(zhǎng)連接之后如何收發(fā)消息
緩存控制
責(zé)任鏈模式
8. ThreadPoolExecutor
github 地址
介紹
jdk中線程池實(shí)現(xiàn)的源碼。
重點(diǎn)
如何實(shí)現(xiàn)一個(gè)生產(chǎn)者消費(fèi)者
停止消費(fèi)者線程時(shí)
awaitTermination的作用如何做到控制核心線程數(shù)的
BlockingQueue的使用方式,ReentrantLock的使用方式,Condition的作用以及使用方式
9. Design Pattern
github地址
https://github.com/iluwatar/java-design-patterns
介紹
包含了幾乎所有常見的設(shè)計(jì)模式以及代碼示例
重點(diǎn)
各種設(shè)計(jì)模式的使用場(chǎng)景,為什么這么設(shè)計(jì)
在Android Framework中哪些部分是和設(shè)計(jì)模式對(duì)應(yīng)的
10.AirMapView
github 地址
https://github.com/airbnb/AirMapView
介紹
AirBnb出品,地圖的抽象封裝層,內(nèi)置提供GoogleMap與網(wǎng)頁地圖,思路稍微些奇怪,地圖的實(shí)現(xiàn)層是通過Fragment來做的,而不是View。并且這種抽象封裝對(duì)于百度或者高德地圖不太適用了,需要針對(duì)性的進(jìn)行改造。
重點(diǎn)
- 如何針對(duì)特定場(chǎng)景抽象定義與具體實(shí)現(xiàn)
11. Android-Job
github 地址
https://github.com/evernote/android-job
介紹
EverNote出品,對(duì)Android各個(gè)系統(tǒng)版本后臺(tái)任務(wù)的統(tǒng)一封裝,內(nèi)部實(shí)現(xiàn)了AlarmManager,JobScheduler,Gcm等。
重點(diǎn)
上層封裝與底層實(shí)現(xiàn)的解耦方式
對(duì)于不同系統(tǒng)版本,使用不同api的封裝方式
12.StackView
github 地址
介紹
Android系統(tǒng)代碼提供的一個(gè)非常復(fù)雜的卡片控件。代碼以及實(shí)現(xiàn)效果都很復(fù)雜,幾乎是常規(guī)業(yè)務(wù)條件下能夠接觸到的最復(fù)雜控件樣式了??ㄆ丶泻芏囝愃频膸?kù),這里只以官方庫(kù)為例。
重點(diǎn)
如何實(shí)現(xiàn)的卡片切換效果* 代碼設(shè)計(jì)中對(duì)于方法抽象,繼承與復(fù)寫的考慮
在復(fù)雜控件中對(duì)于Animator,canvas等的搭配使用
13. Dagger 2
github地址
https://github.com/google/dagger
介紹
Google發(fā)布的依賴注入框架。在Android端使用依賴注入的不二選擇。在很多情況下使用dagger能夠很好的解決模塊解耦問題。
重點(diǎn)
依賴注入是什么
幾種注解承擔(dān)什么樣的角色
apt的使用方式
如何跟生命周期相結(jié)合的