Android 開源項目源碼解析

jopen 9年前發布 | 65K 次閱讀 Android Android開發 移動開發

從 Android 開始建了了協作項目,從簡介、總體設計、流程圖、詳細設計全方面分析開源庫源碼。目前第一期完成,包括10個開源庫及5個公共技術點的全面介紹。

Volley 源碼解析

Volley 是 Google 在 2013 I/O 大會上推出的 Android 異步網絡請求框架和圖片加載框架。特別適合數據量小,通信頻繁的網絡操作。Volley 主要是通過兩種 Diapatch Thread 不斷從 RequestQueue 中取出請求,根據是否已緩存調用 Cache 或 Network 這兩類數據獲取接口之一,從內存緩存或是服務器取得請求的數據,然后交由 ResponseDelivery 去做結果分發及回調處理。


Android Universal Image Loader 源碼分析

Universal Image Loader 是一個強大的、可高度定制的圖片緩存。整個庫分為 ImageLoaderEngine,Cache及 ImageDownloader,ImageDecoder,BitmapDisplayer,BitmapProcessor 五大模塊,其中 Cache 分為 MemoryCache 和 DiskCache 兩部分。簡單的講就是 ImageLoader 收到加載及顯示圖片的任務,并將它交給 ImageLoaderEngine,ImageLoaderEngine 分發任務到具體線程池去執行,任務通過 Cache 及 ImageDownloader 獲取圖片,中間可能經過 BitmapProcessor 和 ImageDecoder 處理,最終轉換為 Bitmap 交給 BitmapDisplayer 在 ImageAware 中顯示。


Dagger 源碼解析

Dagger 是一款 Java 平臺的依賴注入庫。Java 的依賴注入庫中,最有名的應該屬 Google 的 Guice,Spring 也很有名,不過是專注于 J2EE 開發。Guice 的功能非常強大,但它是通過在運行時讀取注解來實現依賴注入的,依賴的生成和注入需要依靠 Java 的反射機制,這對于對性能非常敏感的 Android 來說是一個硬傷。基于此,Dagger 應運而生。Dagger 同樣使用注解來實現依賴注入,但它利用 APT(Annotation Process Tool) 在編譯時生成輔助類,這些類繼承特定父類或實現特定接口,程序在運行時 Dagger 加載這些輔助類,調用相應接口完成依賴生成和注入。Dagger 對于程序的性能影響非常小,因此更加適用于 Android 應用的開發。


EventBus 源碼解析

EventBus 是一個 Android 事件發布/訂閱框架,通過解耦發布者和訂閱者簡化 Android 事件傳遞,這里的事件可以理解為消息,本文中統一稱為事件。事件傳遞既可用于 Android 四大組件間通訊,也可以用戶異步線程和主線程間通訊等等。傳統的事件傳遞方式包括:Handler、BroadCastReceiver、 Interface 回調,相比之下 EventBus 的優點是代碼簡潔,使用簡單,并將事件發布和訂閱充分解耦。


xUtils 源碼解析

xUtils 一個 Android 公共庫,主要包括 View,DB, Http, Bitmap 四個模塊。View 模塊主要的功能是通過注解綁定 UI,資源,事件。DB 模塊是一個數據庫 ORM 框架, 簡單的語句就能進行數據的操作。Http 模塊主要訪問網絡,支持同步,異步方式的請求,支持文件的下載。Bitmap 模塊是加載圖片以及圖片的處理, 支持加載本地,網絡圖片,而且支持圖片的內存和本地緩存。


ViewPagerindicator 源碼解析

ViewPagerIndicator 常用語 ViewPager 的界面導航。主要特點:使用簡單、樣式全、易擴展。該項目總體設計非常簡單,一個 PageIndicator 接口類,具體樣式的導航類實現該接口,然后根據具體樣式去實現相應的邏輯。 IcsLinearLayout:LinearLayout 的擴展,支持了 4.0 以上的 divider 特性。 CirclePageIndicator、LinePageIndicator、UnderlinePageIndicator、 TitlePagerIndicator 繼承自 View。TabPageIndicator、IconPageIndicator 繼承自 HorizontalScrollView。


HoloGraphLibrary 源碼解析

HoloGraphLibrary 是一個可用于繪制圖表的項目,支持繪制線狀圖、柱狀圖、餅狀圖。圖形設計友好,使用方便。不過庫本身代碼一般,建議吸收原理重構而不要直接用。


CircularFloatingActionMenu 源碼解析

CircularFloatingActionMenu 是一個與著名應用 Path 菜單類似的(非完整)圓形彈出菜單。可方便的定制菜單以及動畫。支持自定義動畫、菜單、角度范圍、半徑等。源碼主要分成兩部分,一部分是構成菜單的 View 部分,另一部分是動畫的操作類。


PhotoView 源碼解析

PhotoView 是支持雙擊或雙指縮放的 ImageView。支持 Pinch 手勢自由縮放,支持雙擊放大/還原,支持平滑滾動,在滑動父控件下能夠運行良好,支持基于 Matrix 變化(放大/縮小/移動)的事件監聽。PhotoView 這個庫實際上比較簡單,關鍵點其實就是 Touch 事件處理和 Matrix 圖形變換的應用。


Android Lock Pattern 源碼解析

Lock Pattern 是 Android 的圖案密碼解鎖庫,通過手勢連接 3 * 3 的點矩陣繪制圖案表示解鎖密碼。支持 ACTION_CREATE_PATTERN、ACTION_COMPARE_PATTERN、ACTION_VERIFY_CAPTCHA 三種 Action 操作模式。


公共技術點之Java 動態代理

在某些情況下,我們不希望或是不能直接訪問對象 A,而是通過訪問一個中介對象 B,由 B 去訪問 A 達成目的,這種方式我們就稱為代理。這里對象 A 所屬類我們稱為委托類,也稱為被代理類,對象 B 所屬類稱為代理類。根據程序運行前代理類是否已經存在,可以將代理分為靜態代理和動態代理。


公共技術點之Java 注解 Annotation

注解指能夠添加到 Java 源代碼的語法元數據。類、方法、變量、參數、包都可以被注解,可用來將信息元數據與程序元素進行關聯。Annotation 中文常譯為“注解”,注解的主要作用包括 a. 標記,用于告訴編譯器一些信息。b. 編譯時動態處理,如動態生成代碼。c. 運行時動態處理,如得到注解信息。


公共技術點之View 繪制流程

當 Activity 接收到焦點的時候,它會被請求繪制布局,該請求由 Android framework 處理.繪制是從根節點開始,對布局樹進行 measure 和 draw 。整個 View 樹的繪圖流程在 ViewRoot.java類的performTraversals() 函數展開,該函數所做的工作可簡單概況為是否需要重新計算視圖大小(measure)、是否需要重新安置視圖的位置(layout)、以及是否需要重繪 (draw)。


公共技術點之依賴注入

如果在 Class A 中,有 Class B 的實例,則稱 Class A 對 Class B 有一個依賴。非自己主動初始化依賴,而通過外部來傳入依賴的方式,我們就稱為依賴注入。簡單的說依賴注入主要有兩個好處:(1). 解耦,將依賴之間解耦。(2). 因為已經解耦,所以方便做單元測試,尤其是 Mock 測試。


公共技術點之View 事件傳遞

所有 Touch 事件都被封裝成了 MotionEvent 對象,包括 Touch 的位置、時間、歷史記錄以及第幾個手指(多指觸摸)等。事件類型分為 ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_POINTER_DOWN, ACTION_POINTER_UP, ACTION_CANCEL,每個事件都是以 ACTION_DOWN 開始,ACTION_UP 結束。對事件的處理包括三類,分別為傳遞——dispatchTouchEvent() 函數、攔截——onInterceptTouchEvent() 函數、消費——onTouchEvent() 函數和 OnTouchListener。


項目主頁:http://www.baiduhome.net/lib/view/home/1422952985045


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!