最美應用-從Android研發工程師的角度之[廚房故事]

@author ASCE1885的Github簡書微博CSDN

本文我們將如約來分析下廚房故事這款德國app的技術堆棧。由于國內和國外網絡環境,技術環境的不同,我們將會看到它和最美時光很不一樣的東西。我們需要思考的是如果是自己開發一款全新的app時,會如何選擇屬于自己的技術堆棧呢?


使用的開源函數庫

1.底層庫集合Bolts-Android

Bolts是一個由Parse和Facebook設計的面向iOS和Android的底層庫集合,最初用于公司內部使用。它主要包含兩個特性:

Tasks:更好的組織管理復雜的異步代碼,類似于JavaScript的Promise。

實現了App Links協議,幫助我們鏈接到其他app的提供的內容,同時處理接收到的deep-link。

參考文檔:

Parse發布Bolts,一個面向iOS和Android的底層庫集合

2.開源日志記錄函數庫JakeWharton's Timber

Timber是明星程序員JakeWharton開源的一個日志記錄函數庫,它基于Android Log類基礎上, 提供了簡潔可擴展的API。

日志記錄行為被抽象為一顆一顆的樹??,例如有打印日志到Logcat的樹,有打印日志到文件的樹等等,如果我們要使用某種類型的樹,首選需要創建一個實例,并調用Timber.plant函數將其種植下來,之后就可以隨意使用了。

3.視圖注入函數庫Butterknife

Butterknife同樣是JakeWharton的一個知名作品,基于編譯時注解方式實現Android視圖屬性和方法的綁定,主要特性如下:

在屬性上使用@Bind注解代替findViewById

支持多個類似的View組成一個列表或者數組,并一次性實現數組里面所有View的注入

使用@OnClick對函數進行注解,可以替換匿名內部類的使用

在屬性上使用資源注解可以替換傳統的資源查找方式

參考文檔:

官方文檔

ButterKnife--View注入框架

4.JSON解析函數庫GSON

GSON

是Google出品的函數庫,可以將JSON字符串反序列化為對應的Java對象,或者反過來將Java對象序列化為對應的JSON字符串。免去了開發者

手動通過JSONObject和JSONArray逐個JSON字段進行解析的煩惱,也減少了出錯的可能性,增強了代碼的質量。

參考文檔:

官方的用戶指南

第三方的用戶指南

5.現代的I/O操作函數庫okio

okio作為java.io和java.nio的補充,是由square公司開發的一個函數庫,使得開發者可以更方便的訪問,存儲和處理數據。一開始是作為okhttp的一個組件存在的,當然我們也可以單獨使用它。

6.現代的HTTP函數庫OkHttp

OkHttp是一個高效的HTTP客戶端,具有如下特性:

支持HTTP/2和SPDY,對同一臺主機的所有請求共享同一個socket

當SPDY不可用時,使用連接池減少請求的延遲

透明的GZIP壓縮減少下載的數據大小

緩存響應避免重復的網絡請求

OkHttp

在網絡性能很差的情況下能夠很好的工作,它能夠避免常見的網絡連接問題。如果你的HTTP服務由多個IP地址,OkHttp在第一次連接失敗時,會嘗試其

他可選的地址。這對于IPv4+IPv6以及托管在冗余數據中心的服務來說是必要的。OkHttp使用現代的TLS特性(SNI,

ALPN)初始化HTTP連接,但握手失敗時,會降級使用TSL1.0嘗試初始化連接。

更詳細的使用方法參見文檔

7.圖片異步加載緩存函數庫Android-Universal-Image-Loader

這個函數庫簡稱UIL,是一個功能強大靈活且高度可自定義的用于加載,緩存和顯示圖片的開源函數庫,它提供一系列配置選項,并能很好的控制圖片加載和緩存的過程。

主要特性有:

同步或者異步的多線程圖片加載

高度可自定義:線程池,下載器,解碼器,內存和磁盤緩存,圖片顯示選項等等

每張圖片的顯示支持多種自定義選項:默認存根圖片,緩存切換,解碼選項,Bitmap處理和顯示等

圖片可緩存在內存或者磁盤(設備的文件系統或者SD卡)上

可實時監聽圖片加載流程,包括下載進度。

參考文檔:

Android-Universal-Image-Loader 圖片異步加載類庫的使用(超詳細配置)

Android 開源框架Universal-Image-Loader完全解析

Android Universal Image Loader 源碼分析

8.內存泄露檢測函數庫LeakCanary

LeakCanary

是Square公司又一力作,可用于Debug版本中監控Activity,Fragment等的內存泄露,使用這個函數庫后,square修復了很多內

存泄露問題,甚至發現了Android SDK中的泄露,號稱解決了自家產品中94%的oom泄露問題。

參考文檔:

LeakCanary:檢測所有的內存泄漏

利用 LeakCanary 來檢查 Android 內存泄漏

9.專為移動設備而生的數據庫Realm

Realm是一個現代的移動平臺數據庫,用于替換SQLite和Core Data,它的主要特性有:

移動優先:第一個專為手機,平板和可穿戴設備而生的數據庫

使用簡單:Realm不是基于SQLite之上的ORM框架,相反,它實現了自己的持久化引擎,專注于簡單和速度。

平臺:Realm支持iOS & OS X(Objective-C & Swift)&

Android三個平臺,可以跨平臺共享Realm文件,在Java,Swift和Objective-C中使用相同的模型類,在所有平臺上實現相似的業

務邏輯。

快速:歸功于零拷貝設計,Realm比ORM框架快很多,通常情況下也快于原生SQLite數據庫。

良好的支持:官方在Github,StackOverflow和Twitter上都提供良好的技術支持。

Realm相對于SQLite而言是一個較新的函數庫,還在快速發展進化中,喜歡嘗試新技術的同學可以試試看,當然機遇和挑戰并存,你可能會遇到一些隱藏的bug需要花精力修復,不過一個人想要追求技術的進步就是需要不斷挑戰自我的。

目前試用Realm的知名產品如下圖所示:

參考文檔:

Realm數據庫基礎教程

10.依賴注入函數庫Dagger

Dagger是Square公司開源的一個針對Android和Java的快速依賴注入函數庫,是受到Guice的啟發創建的。它在編譯時實現綁定,并使用反射機制實現圖的構成。

Dagger

算是一個比較成熟穩定的函數庫了,Google維護了一個新分支,習慣上稱之為Dagger2,它在Dagger的基礎上不斷進化,取消了反射的使用,提

供了更好的性能,因此,目前來看,如果要使用Dagger作為依賴注入函數庫的話,推薦采用Dagger2。

參考文檔:

Dagger: 一種Android平臺的依賴注入框架

Dagger 源碼解析

詳解Dagger2

11.EventBus

GreenRobot開發的EventBus是一個專門為Android平臺優化過的發布訂閱事件總線系統。它簡化了Android四大組件之間的通信,使得系統更好的解耦。EventBus的優點是代碼簡潔,使用簡單,并將事件發布與訂閱充分解耦。比較有名的另外一個事件總線函數庫Square公司是otto

參考文檔:

EventBus 源碼解析

EventBus使用詳解

跟我一起寫EventBus

12.Design Support Library

Google I/O 2015為Android開發者帶來的一個全新的開發函數庫,使得開發者更容易創建符合材料設計的移動應用。

Android的材料設計兼容庫(Design Support Library)

使用的第三方SDK

1.云服務Parse SDK

Parse是一個國外的云服務平臺,一年多前被Facebook收購,目前辦公地點在美國的加利福尼亞。廚房故事app使用了這家的云服務,因此引入了對應平臺的SDK。

2.Crash統計SDK Crashlytics

Crashlytic

成立于2011年,是專門為移動應用開者發提供的保存和分析應用崩潰信息的工具。2013年1月,Crashlytics被Twitter收購,成為又一

個成功的創業產品。Crashlytics是功能強大且輕量級的Crash統計SDK,支持Java層和NDK層崩潰統計與分析。

參考文檔:

Android下使用Crashlytics

iOS開發工具——統計Crash的工具Crashlytics

3.Facebook SDK

Facebook由于某些眾所周知的原因,在國內是幾乎用不了的,但這并不妨礙我們進行介紹,有興趣的話你還可以下載這個SDK下來看下源碼,還是有值得學習的地方的。翻不了墻的可以到我的網盤下載。

參考文檔:

Android下使用最新FaceBook SDK 3.0

4. Google推送服務GMS

還是由于某些眾所周知的原因,國內的app幾乎沒有使用GMS的,但作為Android開發者還是應該知道它的存在的。

5.amplitude sdk

實時的用戶統計分析工具,類似國內的友盟,知道用戶使用app的行為,能夠幫助產品經理更好的不斷改進產品。

分析與總結

最美時光相比,廚房故事雖然在某些開源庫的選擇上有些重疊(都使用了GSON,OkHttp,okio,UIL,Timber等),但主體上可以看出很大的不同,廚房故事使用的開源函數庫更“前衛”一些。無論是全新數據庫Realm的使用,Google剛推出不久的Design Support Library的使用,還是LeakCanary的引入,使用RecyclerView代替ListView,抑或是充分利用依賴注入如ButterKnife,dagger來簡化代碼,都可以看出廚房故事更善于,更有勇氣利用新技術來為自身服務。

另一方面,從使用的第三方

SDK可以看出國內app和國外app的顯著不同之處。當然,每個app的技術堆棧都會千差萬別,這取決于團隊的梯隊建設和成員質量,每一個開源函數庫的

選擇都會是折衷的,不存在哪一個函數庫是必選的,總會有替代品,有時選擇可能只是一念之差。但我們總是應該不斷進步,不斷發現或創造新的函數庫,并應用到

實際產品開發中,使得我們的工作和生活越來越美好,這個是大勢所趨。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,709評論 25 708
  • 太長了,還是轉載吧...今天在看博客的時候,無意中發現了@Trinea在GitHub上的一個項目Android開源...
    龐哈哈哈12138閱讀 20,243評論 3 283
  • 昨天是冬至,不覺冬天已過半了,朋友圈發了許多各式各樣的餃子圖片。吃完了冬至餃子,我就思忖著,冬天是屬于沉思的季節,...
    漫舞洛城閱讀 426評論 0 0
  • 那一夜我從你的窗下走過 窗臺上的白蓮已凋謝 我們終究抵不過歲月 追不回 那逝去的無可奈何 如果不曾相遇 我現在會不...
    呆象閱讀 170評論 0 0