Android技術選型閑聊

許久沒有寫技術博客了,這些時間也一直親近Android,就聊聊技術選型。

技術選型對于一個項目的發展非常重要,個人認為:

技術決定下限,品味決定上限。

技術好只能保證做出來的App不爛,品味好了才能將有限的技術發揮到極致,將所做App提升一個檔次。

網絡框架

Retrofit + RxJava + OkHttp
這似乎沒啥可說的,已經是主流了,而且非常好用。

  • Retrofit充分利用注解的靈活性,以接口的形式配置來實現解耦。與后臺溝通起來也非常方便,直接把api接口復制給他就成。
  • RxJava簡直是回不去的一個偉大產物。Java的面向對象很科學,但多線程無窮回調真的要命,很簡單的邏輯常常被弄得很混亂,RxJava很好的解決了這一問題。
  • OkHttp的優點我不是太了解,我只知道我用它之后沒啥網絡上的疑難,該有的都有,想做的都能做。

這里有個不錯的Sample,對RxJava操作不太熟悉的同學可以了解下:
RxJava2-Android-Samples

熱更新

一年前(2018),我在接熱更新的時候還考慮過美團、阿里家的。現在我告訴你,全都pass,用Tinker。至于為什么,稍微關注下就知道哪些項目是騙業績騙star的哪些是真正為解決問題用心維護的。
Tinker官方Wiki
為什么強推Tinker?首先,在我呆過的上家公司與現家,用Tinker發布過幾十次熱更新,沒出過問題。Tinker基于bsdiff算法生成的差分包非常小,沒涉及到文件資源添加的話,大都在30k以內。補丁包自動合成后會有回調,提示用戶重啟App即可生效。

使用Tinker有幾點需要注意:

  • TinkerId非常重要,最好在App內某個地方顯示出來;
  • Manifest.xml最好不要去改動,雖然某些改動生成的補丁包可以合成,但不是在所有設備上都能成功;
  • Tinker補丁是基于安裝時全量包的TinkerId的,所以多次改動后可能會很大,建議過大時不再維護當前版本,而是發布一個新的全量包重新開始。(這段話比較拗口啊,慢慢理解)
  • 發布補丁時不要增加versionCode,盡管Tinker沒有限制你,但是不要增加,否則會亂掉。versionCode是在全量發布apk時增加的。

架構

架構是個比較高大上的話題,因此經常裝逼人士夸口聊。用MVP的同學看不起用MVC的,用MVVM的看不起用MVP的,用LiveModel的看不起用MVVM的。

但是我想說的是:

一味追求鄙視鏈頂端,就好像穿上一雙不合腳的大鞋——徒增負擔。

此外,我個人很不看好MVVM,Google那DataBinding太TM卡了,嚴重影響UI開發效率,而且增加了耦合性。

至于MVP,我覺得不如Fragment好用,同樣是抽離,同樣是拆分代碼,Fragment可以做得更徹底,因為View可以跟著走。

至于LiveModel沒用過,不做評價。但是有一個東西是真的好用——Lifecycles!這貨專治內存泄露!原理很簡單,就是觀察者模式,監聽頁面的生命周期。牛逼之處在于Google將事件發布者集成到了Activity與Fragment,所以用起來非常方便。

總之,選架構之前一定要了解:

  • 這架構能解決什么問題?
  • 這架構又會帶來哪些問題?
  • 擴展性怎樣?
  • 會不會影響平均開發時長?
  • 對性能有沒有影響?
    ...

“九層之臺,起于壘土”,多花點時間思考與參照是非常有必要的。

UI適配

其實不在這范疇,但今天在首頁看到一篇蠢文,所以順帶聊聊UI。

layout選擇

我一般只用這幾個布局:

  • LinearLayout:線性布局,直觀的上下結構或者橫豎結構,用它沒問題。
  • FrameLayout:層疊布局,其實就是設計師眼里的“圖層”,子控件之間沒啥約束的優先用它。
  • ConstraintLayout:彈性布局,非常牛叉,適合約束比較復雜的頁面。比如復雜的item我常用這個布局。RelativeLayout能做的它都能做,而且它自帶比例控制。用好了它你才真正知道什么叫做“減少視圖層級”。
  • CoordinatorLayout:我沒叫過它中文名,也找不到好的譯名,但在Android 5.0 Material Design興起時,它是絕對的主角,沉浸式及一個漂亮的頭部動畫都離不開它,用好它的關鍵是理解Behavior。
文字適配

挑一臺最具代表性的大眾設備,以sp為單位適配好它就好。相同sp在不同設備,其物理大小是不一樣的。比如同樣是默認的14sp,同樣是1080p,小米的會比華為的小一點,因為小米的dp/sp會小一點。
注意:

dp并非物理尺寸,屏幕多少dp*dp是由廠商定義的。

Google這樣設計的好處是手機App可以直接適配電視。(想要驗證上方論述很簡單:在xml中畫一個200dp*200dp的黑框,然后用不同設備預覽)。

另外,dp盡量不要用小數(除非值很小,需控制誤差),Google設計dp就是用來適配眾多設備的,而不是絲毫不差用來適配設計稿的(因為大部分設計稿基于iOS設計)。如果真的是強迫每個設備上顯示物理大小需要一致,那么直接用inch就行(少部分雞賊廠商是沒有給出準確inch的),也別用什么dp了(搬倒磚)。

劉海適配

三星之前的全面屏設備算長的了,都是沒有劉海的,比例是18.5:9。
所以,可以得出最簡單的規則:

boolean hasBang = 1f * longSide / shortSide > 18.51f / 9; //記得浮點數

該規則不會漏掉市面上任何一臺劉海屏手機。但是,它會把極少數非劉海屏手機識別為劉海屏:OPPO、Vivo家的較新旗艦機。如果要進一步精準的話,就把那幾臺特殊的設備型號統計出來,加以判斷即可(其實不是太必要,因為那么長的非劉海手機被識別成劉海屏,上方留了點背景關系不大)。

版本選擇

再聊聊各種版本選擇,比如IDE啊,第三方庫啊,Android buildVersion啊。
個人偏好:

  • 項目穩定性很重要的話,IDE盡量不要預覽版(讓別人去填坑吧)、各種庫也是。
  • 第三方庫之類的升級不要太著急,看看版本變動與issue。
  • 新開項目盡量用最新穩定版,不然以后還得適配api。
  • 現在是2019年了,Android 5.0已經發布5年了,App最低兼容到api21就行了(主要是5.0相比4.+變得太大了,過多的適配影響開發效率。實在要適配的話也只適配到api19,也就是Android4.4,占有率還是有一點的)。
  • 編譯版本的話,新項目可以上Android X,我已經用了半年了,沒啥問題。

尾巴

慣例,留個尾巴。聊得比較休閑,沒打草稿,更多是一些個人偏好,如有技術上的錯誤,還請指正。

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

推薦閱讀更多精彩內容