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

一、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() {@Overridepublic 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() {@Overridepublic 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。

九、日志打印库

logger:简单、漂亮、强大的日志记录器。

另外还有:支持Rxjava的蓝牙库、支持各个平台的分享库、好用的音频视频库等,在这里就不一一列举了。有兴趣的小伙伴可以联系我的微信:1914532832,添加时请注明:android开发。欢迎提意见交流。

原文发布时间为:2018-11-28

本文作者:yuchu1900

本文来自云栖社区合作伙伴“终端研发部”,了解相关信息可以关注“终端研发部”。

android好用的第三方库2018使用总结相关推荐

  1. Android Studio中导入第三方库

    之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...

  2. android打包规范包含第三方库aar,Android Studio 打包AAR和第三方静态库(示例代码)

    需求 现在有一个第三方库libstatic_add.a和对应的头文件static.h,要求封装一个Module,该Module依赖这个静态库,要求打包的Module包含该静态库. 方案 创建Andro ...

  3. Android 开源组件和第三方库汇总

    出自(https://github.com/Tim9Liu9/TimLiu-Android) TimLiu-Android 自己总结的Android开源项目及库. 1. github排名 https: ...

  4. 【Android】Xlua引入第三方库

     一定要在Linux或者Mac环境下 才能打包android的第三方包 一定要在Linux或者Mac环境下 才能打包android的第三方包 一定要在Linux或者Mac环境下 才能打包android ...

  5. android动态申请权限第三方库,Android 关于动态申请权限

    第一种方式:引入三方库,利用第三方申请权限 1.引入三方库: api'com.tbruyelle.rxpermissions2:rxpermissions:0.9.3@aar' 2.调用(当然你需要什 ...

  6. Android Studio项目调用第三方库iconv

    iconv动态库编译请参考:ubuntu-20.04.4环境下ndk-r21e 编译libiconv libiconv-1.16动态库下载:Android libiconv.so动态库 一.创建and ...

  7. Android开发之无bug滑动删除源码(非第三方库)

    Android开发之无bug滑动删除源码(非第三方库源码请在最后面自行下载) 1.我们先来看下效果图:上边是抽取出来的demo,下边是公司用到的项目 2.我们来看下如何调用(我们这里以listView ...

  8. 2018年最全iOS开发之第三方库

    最全iOS开发之第三方库 最新增加 EAIntroView 一个灵活的介绍界面,可以用作引导页 UI 下拉刷新 EGOTableViewPullRefresh– 最早的下拉刷新控件. SVPullTo ...

  9. Android Studio 使用Gradle引入第三方库文件的总结

    2019独角兽企业重金招聘Python工程师标准>>> 使用Android Studio开发Android应用时,避免不了需要借助Gradle引入各式各样的第三方库文件,帮助我们更好 ...

最新文章

  1. Golang mysql数据库
  2. 代码: 0x80131500_微软应用商店错误代码“0x80131500”怎么修复?
  3. kali Linux/Linux 忘记root密码强行修理方法
  4. web html介绍笔记,WEB 之 HTML 系列笔记
  5. SpringCloud Hystrix介绍以及基于RestTemplate与Feign的改造
  6. 贵大计算机学院陈力,CCF贵州大学学生分会完成换届
  7. 记坑 ----- Arrays.sort()
  8. c/c++中的引用变量
  9. TypeScript:初体验
  10. Echarts柱状图配置
  11. telink wiki使用简单说明
  12. [强网杯 2019]Upload
  13. 游戏服务器稳定ping值,网友玩游戏时Ping值超过了2亿!
  14. WordPress 搭建超级好看的主题博客
  15. 3、Java 的变量和数据类型
  16. react-native-calendars的使用
  17. Thinkbook14/15 Gen2 ITL出厂镜像恢复系统提示“PRELOAD FAIL”的解决方案
  18. 高通SDM450 主屏mipi转EDP
  19. Highway Project
  20. 文件文档怎么按类型自动分类保存?

热门文章

  1. 产权分割商铺,太坑人!
  2. 何恺明团队最新力作:超越EfficientNet,GPU上提速5倍|CVPR 2020
  3. 在SAP PI中建立场景
  4. 阿里发布2019十大科技趋势,5G仍是主要生产力
  5. AI时代我们最好做某领域的专家或高手
  6. 英伟达副总裁:生物医疗将是与 AI 结合最紧密的行业之一
  7. AI芯片的过去、现在与未来
  8. (超级详细)jit的介绍和用法
  9. 低代码公司黑帕云被字节跳动收购:潮水褪去,曾经爆火的低代码赛道迎来变局?...
  10. Nat. Commun.速递:合群者有着相似的大脑活动