android好用的第三方庫2018使用總結

不知不覺2018年已經過了大半没卸,來總結一下今年用到的一些好用的框架和第三方庫,包括App架構秒旋、異步通信庫约计、注入注解框架、網絡請求庫迁筛、圖片加載庫煤蚌、動畫庫、數據庫、音頻視頻庫尉桩、平臺分享庫筒占、藍牙庫、權限請求庫等。

需要android開發(fā)視頻資料可以加我微信: 1914532832 ?驗證信息請注明:android開發(fā)

一、App架構

MVP模式:因為 Android 并沒有嚴格的業(yè)務和界面區(qū)分址芯,項目一龐大狮含,就很容易使代碼結構顯得越來越亂。現在 Android 端對 MVP 模式討論越來越熱凄硼,谷歌6.0API以及更多的體現了MVP設計思維,覺得 MVP 是非常適合 Android 上的APP 開發(fā)。但是目前的框架使用起來都太繁瑣良哲,要建立一大堆的文件和類,希望后續(xù)有簡化這些操作的技術出現助隧。

MVVM :這是因為開始官方支持 DataBinding筑凫,把 MVVM 直接帶到 Android 中。數據綁定在 Windows WPF 和 Web (尤其JSP中)已經非常常見并村,它非常高效的開發(fā)效率巍实,讓你只關心你的數據和業(yè)務。這也對 Android 開發(fā)來說哩牍,無疑是一個非常重大的里程碑棚潦,MVVM模式將原來更新UI的操作從activity或fragment中剝離出來,由ViewModel來統(tǒng)一完成UI更新膝昆。

我們的大致流程是這樣的:在activity或fragment中使用Dagger2注入一個專門用于請求數據的類(比如Presenter類)丸边,然后通過Presenter來進行數據請求(有可能是異步的),請求的數據返回后荚孵,再通過activity或fragment中定義的ViewModel來更新UI妹窖,因此在整個過程中,activity和fragment只起到銜接作用收叶,所有工作都分配給別的類做骄呼,所以activity和fragment中代碼很少。

模塊化:模塊化不是什么新鮮東西了判没,但是很多人忽視這個android自帶并且提倡的功能蜓萄。模塊化就是將我們的app按照功能劃分為許多的模塊,方便管理和修改澄峰。android開發(fā)本身提供了項目模塊化的方法绕德,其實創(chuàng)建App工程時,android系統(tǒng)就為我們提供了一個默認的名為app的模塊摊阀。模塊化的好處就是軟件功能清晰耻蛇,單模塊編譯速度快踪蹬,方便修改,并且方便復用臣咖。比如我們將藍牙功能跃捣、分享功能專門弄成一個個模塊。在很多項目中就可以復用這些模塊夺蛇;而且模塊化都是盡量通過接口來訪問模塊疚漆,模塊功能劃分清晰有利于軟件解耦。一個比較好用的第三方模塊化支持庫是阿里的Arouter刁赦,可以很好的解決模塊間的通信問題娶聘。模塊化最大的問題是,如果模塊劃分太細太多甚脉,會影響模塊集成后的編譯速度丸升。

二、異步通信庫

異步操作(多線程切換)很關鍵的一點是程序的簡潔性牺氨,因為在調度過程比較復雜的情況下狡耻,異步代碼經常會既難寫也難被讀懂。 Android 創(chuàng)造的AsyncTask和Handler猴凹,其實都是為了讓異步代碼更加簡潔夷狰。RxJava是函數響應式編程,它的優(yōu)勢也是簡潔郊霎,但它的簡潔的與眾不同之處在于沼头,隨著程序邏輯變得越來越復雜,它依然能夠保持簡潔书劝。

比如下面這個異步操作进倍,按照傳統(tǒng)的異步處理方式,代碼有一堆的縮進庄撮,不易讀:

new Thread() {

? ? ? ?@Override

? ? ? ?public void run() {

? ? ? ? ? ? super.run();

? ? ? ? ? ? for (File folder : folders) {

? ? ? ? ? ? ? ? ? File[] files = folder.listFiles();

? ? ? ? ? ? ? ? ? for (File file : files) {

? ? ? ? ? ? ? ? ? ? ? ?if (file.getName().endsWith(".png")) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?final Bitmap bitmap = getBitmapFromFile(file);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?getActivity().runOnUiThread(new Runnable() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@Override

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?public void run() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?imageCollectorView.addImage(bitmap);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?});

? ? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ?}

}.start();

但是如果使用如下·Rxjava方式寫,就簡潔易懂多了:

Observable.from(folders)

? ? ? ? .flatMap((Func1) (folder) -> { Observable.from(file.listFiles()) })

? ? ? ? .filter((Func1) (file) -> { file.getName().endsWith(".png") })

? ? ? ? .map((Func1) (file) -> { getBitmapFromFile(file) })

? ? ? ? .subscribeOn(Schedulers.io())

? ? ? ? .observeOn(AndroidSchedulers.mainThread())

? ? ? ? .subscribe((Action1) (bitmap) -> { imageCollectorView.addImage(bitmap) });

現在很多其它的庫都有Rxjava擴展毙籽,使整個app業(yè)務流程都可以用Rxjava串起來洞斯,因此,Rxjava是本人強烈推薦的一個庫坑赡。在導入這些庫時要注意Rxjava包重復導入或者版本問題烙如。Rxjava目前已經發(fā)展到2.0,語法有些變化毅否,但是基本思想還是一樣的亚铁。由Rxjava延伸出來的庫還有:

RxAndroid,函數響應式編程螟加, 把 RxJava 帶到 Android 環(huán)境中徘溢。很多時候吞琐,編寫 Android 程序,你也可以看成是數據的處理和流動然爆,換一種思想編程站粟,曾經看起來很棘手的問題,瞬間就很優(yōu)雅的解決了曾雕,相信你會被這種build模式的開發(fā)會越來越愛奴烙。

RxBinding,是 Jake Wharton 的一個開源庫剖张,它提供了一套在 Android 平臺上的基于 RxJava的 Binding API切诀。所謂 Binding,就是類似設置 OnClickListener 搔弄、設置 TextWatcher 這樣的注冊綁定對象的 API幅虑。例如,下面這個按鈕Button防抖處理(避免按鈕重復點擊問題):

button = (Button) findViewById( R.id.bt ) ;

RxView.clicks( button )

? ? ? ? .throttleFirst( 2 , TimeUnit.SECONDS ) //兩秒鐘之內只取一個點擊事件

? ? ? ? .subscribe(new Action1<Void>() {

? ? ? ? ? ? ? ? @Override public void call(Void aVoid) {

? ? ? ? ? ? ? ? ? ? ? ? Toast.makeText(MainActivity.this, "點擊了", Toast.LENGTH_SHORT).show();

? ? ? ? ? ? ? ? }

? ? ? ? }) ;

有了Rxjava肯污,先前流行的發(fā)布翘单、訂閱的輕量級事件總線框架EventBus可以用Rxjava來替代。

另外蹦渣,很多第三方庫也有對應的Rxjava擴展哄芜,所以現在可以說Rxjava在android中已經無孔不入了。因為好用柬唯,就連iOS也有人專門開發(fā)了對應的Rxswift认臊。

三、注入注解框架

Dagger2:android提供的一個注入注解框架锄奢,與Spring 的IOC差不多吧失晴。這個框架它的好處是它沒有采用反射技術(Spring是用反射的),而是用預編譯技術拘央。Dagger2功能是很強大的涂屁,但是Dagger2使用起來還是不太容易理解。

四灰伟、網絡請求庫

okhttp拆又,在Android開發(fā)中,它已經成為眼下最火的http請求框架了栏账。

Retrofit帖族,與okhttp共同出自于Square公司,retrofit就是對okhttp做了一層封裝挡爵。把網絡請求都交給給了Okhttp竖般,我們只需要通過簡單的配置就能使用Retrofit來進行網絡請求了,并且Retrofit支持Rxjava擴展茶鹃,可以將網絡請求整合到Rxjava業(yè)務流中涣雕。

五艰亮、圖片加載庫

早先時候在圖片加載方面,我們大量使用Picasso這個庫胞谭,它是Square的開源項目垃杖,在圖片下載、緩存丈屹、管理等方面提供了極大的方便调俘。但是后來發(fā)現在大量本地圖片加載方面會出現加載失敗問題,再加上Picasso庫已經很長時間沒有更新旺垒,于是改用另一個流行庫Glide彩库,Glide是google員工在Picasso基礎上進行優(yōu)化,總體比Picasso更優(yōu)秀先蒋,在Google很多項目在用骇钦。

六、SQLite數據庫

DBFlow:一個簡化SQLite數據庫使用的第三方庫竞漾,有專門的Rxjava擴展庫眯搭,可以配合Rxjava使用。

LitePal:一個Android庫业岁,使得開發(fā)人員使用SQLite數據庫非常容易鳞仙。

七、動畫庫

?viewanimator:android本身提供了AnimatorSet這個類來支持幾個連續(xù)或同時的動畫笔时,比如一個視圖從(0棍好,0)這個位置移動到(100,100)允耿,同時視圖順時針旋轉90度借笙。但是如果動畫連續(xù)效果很多,代碼量就會增加较锡,顯得代碼很凌亂业稼,代碼不易讀。viewanimator代碼類似Rxjava的鏈式結構蚂蕴,動畫過程一目了然低散,碰到頁面里有多個視圖需要動畫并且有一系列連續(xù)動畫時可以使用這個庫。使用很簡單只要在build.gradle里面導入:implementation 'com.github.florent37:viewanimator:1.0.5'(最后面的版本號有可能會更新)掂墓。

Lottie:你如果是程序員谦纱,我相信你一定會愛死這個庫看成。這個庫充分體現了一句話:每個人都做自己擅長的事君编。或許這是趨勢吧川慌,未來如果都往這個方向發(fā)展吃嘿,程序員就可以將更多的精力關注在業(yè)務邏輯方面祠乃,而不是成天被UI這些東西搞得死去活來。按照傳統(tǒng)的方法兑燥,一個動畫效果亮瓷,程序員從接到手到開發(fā)結束,往往都要被設計師扒一層皮降瞳,因為動畫的過程需要程序員用代碼來實現嘱支,動畫效果往往很難一次性達到設計師的要求,所以調整挣饥、調整......永無止境的調整除师。有了Lottie這個庫之后,動畫效果是由設計師自己決定的扔枫,設計師使用AE等軟件生成包含一套動畫效果的.json文件汛聚,程序員只是將這個文件加載到app里面,用Lottie庫提供的一個視圖裝一下短荐,而且android和iOS可以共用一套動畫效果(效果好不好倚舀,跟程序員一毛錢關系都沒有,一定有程序員在偷笑)忍宋。至于這個庫的使用方法網上很多痕貌,自己搜索一下。

八讶踪、權限請求庫

EasyPermission:一個簡化Android 6.0項目用戶權限設置的庫芯侥,使用很簡單。

RxPermissions:一個關于用戶權限設置的庫乳讥,該庫在項目運行時動態(tài)進行權限請求柱查,支持RxJava2。

需要android開發(fā)視頻資料可以加我微信: 1914532832 ?驗證信息請注明:android開發(fā)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末云石,一起剝皮案震驚了整個濱河市唉工,隨后出現的幾起案子,更是在濱河造成了極大的恐慌汹忠,老刑警劉巖淋硝,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異宽菜,居然都是意外死亡谣膳,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門铅乡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來继谚,“玉大人,你說我怎么就攤上這事阵幸』模” “怎么了芽世?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诡壁。 經常有香客問我济瓢,道長,這世上最難降的妖魔是什么妹卿? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任旺矾,我火速辦了婚禮,結果婚禮上夺克,老公的妹妹穿的比我還像新娘宠漩。我一直安慰自己,他們只是感情好懊直,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布扒吁。 她就那樣靜靜地躺著,像睡著了一般室囊。 火紅的嫁衣襯著肌膚如雪雕崩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天融撞,我揣著相機與錄音盼铁,去河邊找鬼。 笑死尝偎,一個胖子當著我的面吹牛饶火,可吹牛的內容都是我干的。 我是一名探鬼主播致扯,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肤寝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抖僵?” 一聲冷哼從身側響起鲤看,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耍群,沒想到半個月后义桂,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡蹈垢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年慷吊,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曹抬。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡溉瓶,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情嚷闭,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布赖临,位于F島的核電站胞锰,受9級特大地震影響,放射性物質發(fā)生泄漏兢榨。R本人自食惡果不足惜嗅榕,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吵聪。 院中可真熱鬧凌那,春花似錦、人聲如沸吟逝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽块攒。三九已至励稳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間囱井,已是汗流浹背驹尼。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庞呕,地道東北人新翎。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像住练,于是被迫代替她去往敵國和親地啰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容