android好用的第三方库2018使用总结

不知不觉2018年已经过了大半,来总结一下今年用到的一些好用的框架和第三方库,包括App架构、异步通信库、注入注解框架、网络请求库、图片加载库、动画库、数据库、音频视频库、平台分享库、蓝牙库、权限请求库等。

需要android开发视频资料可以加我微信: 1914532832  验证信息请注明:android开发

一、App架构

MVP模式:因为 Android 并没有严格的业务和界面区分,项目一庞大,就很容易使代码结构显得越来越乱。现在 Android 端对 MVP 模式讨论越来越热,谷歌6.0API以及更多的体现了MVP设计思维,觉得 MVP 是非常适合 Android 上的APP 开发。但是目前的框架使用起来都太繁琐,要建立一大堆的文件和类,希望后续有简化这些操作的技术出现。

MVVM :这是因为开始官方支持 DataBinding,把 MVVM 直接带到 Android 中。数据绑定在 Windows WPF 和 Web (尤其JSP中)已经非常常见,它非常高效的开发效率,让你只关心你的数据和业务。这也对 Android 开发来说,无疑是一个非常重大的里程碑,MVVM模式将原来更新UI的操作从activity或fragment中剥离出来,由ViewModel来统一完成UI更新。

我们的大致流程是这样的:在activity或fragment中使用Dagger2注入一个专门用于请求数据的类(比如Presenter类),然后通过Presenter来进行数据请求(有可能是异步的),请求的数据返回后,再通过activity或fragment中定义的ViewModel来更新UI,因此在整个过程中,activity和fragment只起到衔接作用,所有工作都分配给别的类做,所以activity和fragment中代码很少。

模块化:模块化不是什么新鲜东西了,但是很多人忽视这个android自带并且提倡的功能。模块化就是将我们的app按照功能划分为许多的模块,方便管理和修改。android开发本身提供了项目模块化的方法,其实创建App工程时,android系统就为我们提供了一个默认的名为app的模块。模块化的好处就是软件功能清晰,单模块编译速度快,方便修改,并且方便复用。比如我们将蓝牙功能、分享功能专门弄成一个个模块。在很多项目中就可以复用这些模块;而且模块化都是尽量通过接口来访问模块,模块功能划分清晰有利于软件解耦。一个比较好用的第三方模块化支持库是阿里的Arouter,可以很好的解决模块间的通信问题。模块化最大的问题是,如果模块划分太细太多,会影响模块集成后的编译速度。

二、异步通信库

异步操作(多线程切换)很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 创造的AsyncTask和Handler,其实都是为了让异步代码更加简洁。RxJava是函数响应式编程,它的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。

比如下面这个异步操作,按照传统的异步处理方式,代码有一堆的缩进,不易读:

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业务流程都可以用Rxjava串起来,因此,Rxjava是本人强烈推荐的一个库。在导入这些库时要注意Rxjava包重复导入或者版本问题。Rxjava目前已经发展到2.0,语法有些变化,但是基本思想还是一样的。由Rxjava延伸出来的库还有:

RxAndroid,函数响应式编程, 把 RxJava 带到 Android 环境中。很多时候,编写 Android 程序,你也可以看成是数据的处理和流动,换一种思想编程,曾经看起来很棘手的问题,瞬间就很优雅的解决了,相信你会被这种build模式的开发会越来越爱。

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,先前流行的发布、订阅的轻量级事件总线框架EventBus可以用Rxjava来替代。

另外,很多第三方库也有对应的Rxjava扩展,所以现在可以说Rxjava在android中已经无孔不入了。因为好用,就连iOS也有人专门开发了对应的Rxswift。

三、注入注解框架

Dagger2:android提供的一个注入注解框架,与Spring 的IOC差不多吧。这个框架它的好处是它没有采用反射技术(Spring是用反射的),而是用预编译技术。Dagger2功能是很强大的,但是Dagger2使用起来还是不太容易理解。

四、网络请求库

okhttp,在Android开发中,它已经成为眼下最火的http请求框架了。

Retrofit,与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用Retrofit来进行网络请求了,并且Retrofit支持Rxjava扩展,可以将网络请求整合到Rxjava业务流中。

五、图片加载库

早先时候在图片加载方面,我们大量使用Picasso这个库,它是Square的开源项目,在图片下载、缓存、管理等方面提供了极大的方便。但是后来发现在大量本地图片加载方面会出现加载失败问题,再加上Picasso库已经很长时间没有更新,于是改用另一个流行库Glide,Glide是google员工在Picasso基础上进行优化,总体比Picasso更优秀,在Google很多项目在用。

六、SQLite数据库

DBFlow:一个简化SQLite数据库使用的第三方库,有专门的Rxjava扩展库,可以配合Rxjava使用。

LitePal:一个Android库,使得开发人员使用SQLite数据库非常容易。

七、动画库

 viewanimator:android本身提供了AnimatorSet这个类来支持几个连续或同时的动画,比如一个视图从(0,0)这个位置移动到(100,100),同时视图顺时针旋转90度。但是如果动画连续效果很多,代码量就会增加,显得代码很凌乱,代码不易读。viewanimator代码类似Rxjava的链式结构,动画过程一目了然,碰到页面里有多个视图需要动画并且有一系列连续动画时可以使用这个库。使用很简单只要在build.gradle里面导入:implementation 'com.github.florent37:viewanimator:1.0.5'(最后面的版本号有可能会更新)。

Lottie:你如果是程序员,我相信你一定会爱死这个库。这个库充分体现了一句话:每个人都做自己擅长的事。或许这是趋势吧,未来如果都往这个方向发展,程序员就可以将更多的精力关注在业务逻辑方面,而不是成天被UI这些东西搞得死去活来。按照传统的方法,一个动画效果,程序员从接到手到开发结束,往往都要被设计师扒一层皮,因为动画的过程需要程序员用代码来实现,动画效果往往很难一次性达到设计师的要求,所以调整、调整......永无止境的调整。有了Lottie这个库之后,动画效果是由设计师自己决定的,设计师使用AE等软件生成包含一套动画效果的.json文件,程序员只是将这个文件加载到app里面,用Lottie库提供的一个视图装一下,而且android和iOS可以共用一套动画效果(效果好不好,跟程序员一毛钱关系都没有,一定有程序员在偷笑)。至于这个库的使用方法网上很多,自己搜索一下。

八、权限请求库

EasyPermission:一个简化Android 6.0项目用户权限设置的库,使用很简单。

RxPermissions:一个关于用户权限设置的库,该库在项目运行时动态进行权限请求,支持RxJava2。

需要android开发视频资料可以加我微信: 1914532832  验证信息请注明:android开发

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容