android好用的第三方库2018使用总结
不知不觉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() {
@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。
九、日志打印库
logger:简单、漂亮、强大的日志记录器。
另外还有:支持Rxjava的蓝牙库、支持各个平台的分享库、好用的音频视频库等,在这里就不一一列举了。有兴趣的小伙伴可以联系我的微信:1914532832,添加时请注明:android开发。欢迎提意见交流。
原文发布时间为:2018-11-28
本文作者:yuchu1900
本文来自云栖社区合作伙伴“终端研发部”,了解相关信息可以关注“终端研发部”。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
用Python实现手机抓包,获取当当图书差评数据!
在这个万物互联的时代,手机端(App)、电脑端(Web),连接着你我他。 本次学习了手机抓包的相关知识,了解了Charles-mitmproxy-Appium的基本使用,通过对当当图书评论的爬取,得以实践。 那么就让我们来看看当当图书「活着」的差评吧! / 01 / Charles Charles是一个APP抓包工具,与我之前最先使用的Filddler相似,可以得到手机App运行过程中发生的所有网络请求和响应内容。 这里简单说一下安装。 电脑端下载安装完Charles后,需要配置证书,最后开启SSL监听,这个具体大家自己自行百度。 手机端则是需要与电脑在同一网络下,比如都连接家里的WIFI,然后在手机的WIFI高级选项里使用Charles代理,输入电脑的IP地址,端口8888,最后为证书命名。 连好以后,手机打开当当App,到图书「活着」的差评页,不断向下滑动差评页面,便能在电脑上的Charles观察到下面的信息。 将电脑上的信息与手机上的信息匹配一下。 这样我们通过请求信息,就可以知道App评论的真正API接口了。 不过呢有的时候会碰见App接口带有密匙的,我们不好确定出API接口,...
-
下一篇
将您的Cordova应用程序打包
参考 https://github.com/MicrosoftDocs/cordova-docs/blob/master/articles/tutorial-package-publish/tutorial-package-publish-readme.md Package Your Cordova App for Publishing to an App Store 为要定位的每个平台创建一个包。然后,您可以将每个包发布到商店。 打包Android版的应用 在这个部分: 修改应用的设置。 生成私钥。 请参阅配置文件中的该键。 创建包。 第1步:修改应用的设置 应用程序的常规设置显示在配置设计器的“常用”页面中。 在显示名称是出现在App Store名称。 该包名称是唯一标识您的应用程序的字符串。 选择一种命名方案,以减少名称冲突的可能性。 该域名访问集合列出了您的应用程序需要访问域。 例如,出现在上一图像中的WeatherApp从具有域的服务端点获取天气数据https://query.yahooapis.com。 大多数其他设置的目的从标题中清除,但您可以在此处找到有关它们的更多信息...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)