一個值很得學習的項目—可用於畢業答辯

前段時間有些兄弟問我沒有可用於畢業答辯的項目。呼以前來,我給他們介紹了不少,最近介紹一個適合學習的開源的開源項目——豆瓣客戶端git

部分特性

  • Material Design
  • 首頁友鄰廣播
  • 啓動速度優化
  • 界面動畫
  • 支持屏幕旋轉
  • 平板多列視圖
  • 支持使用 Custom Tabs 打開網頁
  • 支持切換長/短連接顯示

放幾張效果圖吧github

功能架構

導航採用抽屜一級導航 + 選項卡二級導航的方式。工具欄上將顯示全局的動做。算法

  • 工具欄
    • 提醒:全部類別的提醒,能夠查看歷史提醒
    • 豆郵:用戶間的郵件往來,但願鼓勵鄭重而非聊天。
    • 搜索:當即訪問想要的內容。
  • 用戶:點擊後顯示我的頁面,至關於「個人豆瓣」。
  • 首頁
    • 友鄰廣播:友鄰互動、友鄰推薦、系統定製的推薦。
    • 九點:友鄰的日記、博客文章等,有深度的內容。
    • 一刻:全站範圍的熱門內容推薦。
    • 同城:基於地理位置的內容。
    • 線上活動:基於共同興趣的內容。
  • 讀書
    • 分類瀏覽、首頁推薦:入口,以及最有可能發現新內容的地方。
    • 我讀:管理本身的讀書標記、創造內容。
    • 動態:查看友鄰的閱讀動態,互動、得到推薦。
    • 豆瓣猜:基於算法的推薦。
  • 電影
    • 相似讀書。
  • 音樂
    • 相似讀書。
  • 設置:提供應用設置等。

在子頁面設計中,豆芽將盡可能鼓勵長內容和用心的互動。由於我相信只有豆瓣值得這樣嘗試。緩存

實現架構

數據層面

應用除了對少數內容進行緩存,其餘內容均直接從網絡獲取。bash

  • 基於 Android 帳戶系統提供用戶帳戶和身份認證。
  • 使用 Retrofit 及部分自定義加強處理網絡請求。
  • 使用 Gson 自動填充數據模型。
  • 使用 Glide 加載圖片。
  • 使用 DiskLRUCache 及自定義加強對首頁數據進行緩存。
  • 使用 EventBus 同步不一樣頁面間對象狀態。

界面層面

  • 使用 Support Library 中的 AppCompat、Design、CardView、RecyclerView 進行 Material Design 實現,在必要時引入/本身寫做第三方庫以實現部分界面元素和效果。

= 使用框架的 Shared Element Transition 實如今 Android 5.0 以上的界面過渡動畫。微信

  • 界面實現通常分爲 Activity、Fragment、Adapter 三個模塊,分別負責做爲容器,發起請求、展現數據和用戶交互,以及數據/交互綁定。

實現難點

  • 網絡請求網絡

    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。

通過自定義窗口背景和其餘優化,應用在手機上已經能夠達到當即啓動的視覺效果。

項目地址

github.com/DreaminginC…

相信本身,沒有作不到的,只有想不到的

若是你以爲此文對您有所幫助,歡迎入羣 QQ交流羣 :644196190
微信公衆號:終端研發部

技術+職場
技術+職場
相關文章
相關標籤/搜索