前段時間有些兄弟問我沒有可用於畢業答辯的項目。呼以前來,我給他們介紹了不少,最近介紹一個適合學習的開源的開源項目——豆瓣客戶端git
放幾張效果圖吧github
導航採用抽屜一級導航 + 選項卡二級導航的方式。工具欄上將顯示全局的動做。算法
在子頁面設計中,豆芽將盡可能鼓勵長內容和用心的互動。由於我相信只有豆瓣值得這樣嘗試。緩存
應用除了對少數內容進行緩存,其餘內容均直接從網絡獲取。bash
= 使用框架的 Shared Element Transition 實如今 Android 5.0 以上的界面過渡動畫。微信
網絡請求網絡
Retrofit 自己已經較爲強大,而在豆芽中則對 Retrofit 進行了包裝,增長了認證和錯誤處理等功能,爲以後 API 層創建提供了不少方便。架構
磁盤緩存框架
DiskLRUCache 是一個只實現了同步讀取寫入的庫,所以豆芽對其進行了包裝,提供了異步讀寫的 API,正確實現,提升了應用的響應速度。異步
狀態同步
因爲各個界面獨自獲取數據,數據自己與常規的 ContentProvider 機制中不一樣,是去中心化的,便可能遇到狀態不一樣步的問題。
具體地說,即有可能用戶在廣播詳情界面中點贊後,回到主界面列表視圖,發現並未更新狀態。
而豆芽解決方案則是使用 EventBus,在請求完成後通知全部界面刷新同一數據。
界面動畫
Android 5.0 以上提供了 SharedElementTransition,然而默認狀況下共享的界面元素在動畫時卻會被放置在其餘界面元素之上,致使其忽然越過 AppBar 或 StatusBar 的狀況。
經過大量的文檔閱讀、源代碼分析和調試,通過大約一週的時間,最終實現了較爲理想的效果。
屏幕旋轉
Android 在屏幕旋轉時,會銷燬視圖和 Activity 並重建,此時如何保存視圖狀態和已加載的數據、正在進行的網絡請求便是問題。
Android 對部分視圖狀態提供了自動保存恢復,而豆芽對於其餘須要保存的狀態則經過自定義的 onSaveViewState() 和 onRestoreViewState()。
對於數據,豆芽經過自定義的一個無界面的 RetainDataFragment 進行數據保留,而且接口十分簡單易用。
同時,因爲網絡請求的異步特性,豆芽經過自定義的一個 RequestFragment 實現了網絡請求在 Activity 重建期間的保留,而且可以在 Activity 重建完成後將請求前的狀態和請求結果回調至新的 Activity。
平板適配
Android 自己的資源系統提供了對不一樣配置的很好支持,經過創建不一樣的資源文件,便可在手機和平板上使用不一樣的界面設定。
此外,因爲採用了 RecyclerView,經過在運行時判斷當前設備配置,能夠動態給界面設置爲 一、二、3 列視圖,充分利用屏幕空間。
啓動速度
Android 默認在冷啓動應用進程至可以調用 Activity.onCreate() 前會加載應用主題中的背景做爲預覽,而默認背景是白色,與應用在上部擁有綠色 AppBar 的效果不相匹配。
爲了生成適應於不一樣屏幕大小、系統版本的圖片,我使用 bash 編寫了一系列腳本,並實現了一個通用的模板化 SVG 格式,詳情見 MaterialColdStart 和 AndroidSVGScripts。
通過自定義窗口背景和其餘優化,應用在手機上已經能夠達到當即啓動的視覺效果。
項目地址
若是你以爲此文對您有所幫助,歡迎入羣 QQ交流羣 :644196190
微信公衆號:終端研發部