在2020年3月到4月的春招期间,通过不懈努力和几乎每天两三次的面试,我也是成功从最开始的Java服务端开发转向了Android客户端开发,说实话,相对于Java来说,Android的前景和发展潜力可能确实无法相比,所以这样的转方向更多是出于作者自身的兴趣使然。毕竟现在Android智能手机还是比较普遍的,而且做出Android应用就马上能在自己手机上运行起来的成就感确实要比较让人满足。
在春招收尾时,我也有陆续进行一些零散的学习——包括Android X新特性,自定义控件,MVP思想以及一些Android项目运行时的调优。可能是没有系统地进行学习,总感觉这些知识点在学习过后若只是简单使用,确实没有办法比较好地理解其精髓。
为了改正不良的学习习惯,这次打算以五一作为一个开头,进行为期一个月(或许会延长更久)的Android常用框架的自学。虽然每天只学习一个框架确实可能学不到其精髓,只能掌握其使用,但是接触广了,也会拓展自己的知识面,增强对于编程思想的理解。
作者将要学习的这些框架,大多都与Android相关,并且都是在Android开发中比较常用和常见的框架。为了记录学习历程,将以博客的形式记录。同时,作者会将学习框架时的demo整合成一个项目,放置到码云上(Github对于不用户实在是不友好)。此篇博客仅作为一系列学习框架的目录,读者若是对哪一个框架感兴趣,通过下一小节的超链接索引进入对应博客即可。
话不多说,赶紧开始学习吧!
强烈建议收藏这篇博客!以后若想查看某个框架的使用方法也比较方便!
若没有特殊说明,该系列博客中所有的案例中,主要框架均使用了GitHub上提供的最新稳定版,另外,本地开发环境也基本上是最新的,现陈列出来,供读者进行参考和比对:
功能 | 工具 |
---|---|
IDE | Android Studio 3.6 |
Android SDK | Android X |
Android NDK | 21 |
服务器 | TomCat 9 |
数据库 | SQLite |
版本管理工具 | Gradle 5.6.4 |
Android Gradle Plugins | 3.6.1 |
LitePal,是一款开源的Android数据库框架,它采用了对象关系映射(0RM )的模式,并将我们平时开发最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和増删改查的操作。
每天学习一个Android中的常用框架——1.Litepal
GreenDao,是一款高效、快速的SQLite型数据库框架。
每天学习一个Android中的常用框架——2.greenDao
Realm,是一款移动端数据库框架,核心数据引擎由C++打造,比普通的Sqlite型数据库快的多。
DBFlow,是Android上使用的比较多的一个开源数据库,其特点是使用注解完成大部分内容的工作。
OkHttp,是基于HTTP和HTTP2.0协议的网络框架,服务于Java和Android客户端。
每天学习一个Android中的常用框架——3.OkHttp
OkIo,更加高效易用的IO库。作为OkHttp的底层IO库,Okio确实比传统的java输入输出流读写更加方便高效。Okio补充了java.io
和java.nio
的不足,使访问、存储和处理数据更加容易,它起初只是作为OKHttp的一个组件,现在你可以独立的使用它来解决一些IO问题。
每天学习一个Android中的常用框架——4.OkIo
Retrofit,是一款类型安全的网络框架,基于HTTP协议,服务于Android和Java端。
每天学习一个Android中的常用框架——5.Retrofit
Volley,作为旧版本Android的官方网络框架,现已过时,主要原因是在新版本的Android中作为Volley底层实现的HttpClient
过时了,Google也在2015年9月8日发布最后一个版本后宣布Volley将停止维护。
官方说明如下:
Please note, this project is deprecated and no longer being maintained, please use official version volley.
若有想学习Volley的读者,可以参考Volley的GitHub官方网站:Volley,这里就不再专门写一篇博客来讲解了。
Android Async Http,基于Http协议的异步请求的网络框架。
ButterKnife,所提供了一种能力——使用注解生成模板代码,将view与方法和参数绑定,还提供了onclick绑定以及字符串的初始化。
Zelezny,是集成在Android Studio中使用ButterKnife的插件,可以快速生成相应代码。
每天学习一个Android中的常用框架——6.ButterKnife & Zelezny
IcePick,简化开发框架,可以避免在Activity
恢复时重新设置状态的麻烦。
每天学习一个Android中的常用框架——7.IcePick
Dagger,通过依赖注入降低程序间耦合的开发框架。
每天学习一个Android中的常用框架——8.Dagger
xUtils,作为在AFinal之上改善的注解开发框架,包含了orm
, http(s)
, image
, view
注解, 但依然很轻量级(251K), 并且特性强大, 方便扩展。
每天学习一个Android中的常用框架——9.xUtils
Annotations,基于注解的快速开发框架,与Butterknife一样基于注解,利用注解快速完成view的初始化,不同的是Annotations提供了更多的能力:简单的线程模型等。
Glide,是专注于提供流畅划动能力的“图片加载和缓存框架”。
每天学习一个Android中的常用框架——10.Glide
Android Universal Image Loader,在Glide之前,UIL作为图片加载的曾经的图片加载框架王者,Android开发老手都用过它。UIL与gilde最大区别是可定制,UIL提供了大量配置方式,图片加载状态的回调(成功,失败,进行中),加载动画等;以及提供了移动端图片加载框架的缓存思路:三级缓存策略(内存,sd卡,网络)。
经过作者测试,UIL已经无法兼容Android X,使用UIL会报出依赖冲突的错误,如下图所示:
或许UIL可以在低于Android X的版本下继续使用,但出于其已很长时间未维护的原因,因此就不再专门写一篇博客来记录了,有兴趣的读者可以参考UIL的官方GitHub上的文档:Android-Universal-Image-Loader,主要是参考ImageLoaderConfiguration
、DisplayImageOptions
两个类在构造者模式下的配置条目。另外,若是确有需求需要使用UIL的读者,还可以参考此篇博客Android开源框架Universal-Image-Loader详解,此篇博客以全面地讲解了UIL,供有需要的读者查阅。
Picasso,同样作为图片加载框架,其开发者仍然是大名鼎鼎的Square公司。与其他图片加载框架不同的是,Picasso更强调网络图片的加载,其底层也封装了自家产品OkHttp以及OkIo
经过作者测试,Picasso已经无法兼容Android X(Android P都不行),使用Picasso会报出错误,如下图所示:
这是由于在Android P 中,引入了对非官方API的限制。无论是通过反射还是通过JNI等方法, 只要应用程序引用非SDK接口或尝试使用反射或JNI获取其句柄,就会使应用受到这些限制。想要具体介绍该特性的读者可以参考该篇博客:Android P 禁用非官方API,Google官方的原文如下:
为了保证学习到的框架能够兼容到Android X甚至即将要发布的Android R,这里就不再专门编写一篇博客来记录了。说到底,图片框架的调用都是相对简单的,若是确实想要学习该框架的读者,建议直接参考Picasso的GitHub官网文档:Picasso,其中相当详细地介绍了Picasso的用法。
Fresco,可以管理图片内存的框架,facebook的出身证明了它并非是重复造的轮子,在管理图片内存领域上有着它的一片天地,渐进式加载、加载gif都是它独有的特性。
每天学习一个Android中的常用框架——11.Fresco
Handler,作为Android官方提供的一个专门处理消息处理的机制,严格来说其实并不算框架。但是为了更好地理解接下来将要学习的消息处理框架EventBus以及RxJava,我们还是需要先把官方提供的这套机制理解透彻。
每天学习一个Android中的常用框架——12.Handler
AsyncTask,是除了Handler之外,Android提供给我们方便地在子线程中对UI进行操作的另一个工具。借助AsyncTask,即使你对异步消息处理机制完全不了解,也可以十分简单地从子线程切换到主线程。当然,AsyncTask背后的实现原理也是基于异步消息处理机制的,只是Android帮我们做了很好的封装而已。
每天学习一个Android中的常用框架——13.AsyncTask
EventBus,本地组件间通信框架,在大型项目的Activities
,Fragments
,Threads
,Services
都可以看到它的使用场景,尽管EventBus在向未创建的组件传递事件时有些局限,仅适合在“活着的”组件间传递消息,但仍不妨碍它活跃在各个大型项目各个场景里。
每天学习一个Android中的常用框架——14.EventBus
RxJava,是Java或Android客户端组件间异步通信的框架。
每天学习一个Android中的常用框架——15.RxJava
RxBinding,提供UI组件事件响应能力的框架,如果你还未开始RxAndroid之旅,RxBinding可以作为你的第一站,通过RXBinding,你将理解响应式编程的快乐,让项目里的事件流程更清晰。
Agera,服务于Android平台的响应式编程框架,Google专门推出一套响应式编程框架服务于Android开发者,相比于之响应式编程框架榜首的 RxJava/RxAndroid,它更轻量。
Otto,老旧且强大的事件总线框架。如今Square已经建议开发者采用RxJava/RxAndroid来代替Otto了。但Otto仍有与EventBus横向对比的价值,纵向来说,Otto与square自家开发的Rx系列框架的差异同样值得开发者们去探究。
FastJson,是基于json
解析、生成的框架。从它的名字不难看出,快速是它最大的特性,阿里巴巴的出身保证了代码的质量和优越。
Gson,是Google提供的用来在Java对象和JSON
数据之间进行映射的Java类库。可以将一个Json
字符转成一个Java对象,或者将一个Java转化为Json
字符串。
Lottie,可以在Android端快速展示Adobe Afeter Effect(AE)工具所作动画的框架,利用json
文件快速实现动画效果是它最大的便利,而这个json
文件也是由Adobe提供的After Effects(AE)工具制作的,在AE中装一个Bodymovin的插件,使用这个插件最终将动画效果生成json
文件,这个json
文件即可由LottieAnimationView解析并生成绚丽的动画效果。而且还支持跨平台。
Material Animations,提供场景转换过渡能力的动画框架,Material Animations提供的是场景切换的动画效果。Android官网sample中已经提供了部分Transition
(转场动画)的展示,作为初学者很难快速拓展到自己的项目中,Material Animations的示例出现为开发者省去了此类麻烦,直接照搬应用到自己的App中吧。
ViewAnimations,提供可爱动画集合的框架,正如作者所说,它囊括了开发需求过程中所有的动画效果,集成进了这个简洁可爱的动画框架。
Gif Drawable,提供展示GIF动画能力的视图框架。
MPAndroidChart,图表框架,以快速、简洁。强大著称。
Tinker,是微信官网的Android热补丁解决方案。
DroidPlugin,热门的插件化开发框架,由360团队出品。
Dynamic Load Apk,插件化开发框架,全面的文档介绍让你很快就能上手插件化开发。
Atlas,淘宝推出的组件化开发框架,提供了解耦、组件、动态的开发能力。
LeakCanary,内存检测框架,服务于Java和Android客户端。方便,简洁是LeakCanary最大的特点,只需在应用的apllication
中集成,就可以直接使用它。
Stetho,提供在Chrome开发者工具上调试Android app能力的开源框架。上古时期Android程序员要调试本地数据库,需要进入Android Device Monitor
找到/data/data/com.xxx.xxx/databases里面的db文件,导出到PC端,用PC的数据工具查看,现在使用Stetho省却了如此的麻烦;如今的Android程序员如果想调试网络请求响应过程中的报文段,需要在请求中加入Log语句,一个信息一个信息打印出来,相当繁琐,现在请使用Stetho,省却诸如此类的麻烦把!
Logger,让log日志优雅显示的框架,Logger作为调试框架,并未给出很强大的能力,它最大的亮点是优雅的输出log
信息,并且支持多种格式:线程、Json
、Xml
、List
、Map
等,如果你整日沉迷于汪洋大海般的log
信息不能自拔,Logger就是你的指路明灯!
Zxing,条码图像处理库,专注于生成和解析二维码。
BaseRecyclerViewAdapterHelper,强大、流畅的Recyvlerview
通用适配器,如果你是RecyclerView
的拥簇者,就一定要体验这款专门服务该view的适配器。
Calligraphy,自定义字体框架,如果你还在为一键修改App内所有字体样式而烦恼,Calligraphy就值得你拥有,它可以同时修改整个整个项目的Textview
字体,也可以单独设置某个Textview
的字体,还在等什么,快来试试吧!
ListViewAnimations,为ListView
提供动展示画效果能力的框架。
Recyclerview Animators,为Recyclerview
提供扩展动画能力的框架。
uCrop,优雅的图片裁剪框架。
Luban,最接近微信的图片压缩框架。
PermissionsDispatcher,基于注解的提供解决运行时危险权限方案的框架。自Android 6.0,Google提出危险权限一词起,用户安全性被提到一定的高度,一些运行时对用户较为危险的权限将不再自动被开发者获取,需要经过用户批准,开发者才可以继续使用该权限,要想处理这些问题,可以尝试使用这个框架。
Icontify,具有大量矢量图标和字体的第三方库,常常用作App瘦身计划中。
SlidingMenu,是侧滑菜单栏框架,与Android Userval Image loader 齐名的上古神器框架,可以为你的app提供侧滑菜单栏的功能;即使在Google推出了NavigationDrawer
,仍然没有减少开发者对SildingMenu的拥簇,经典总是经得起考验的,这个上古框架已经四年没有更新了;
PhotoView,一款ImageView
展示框架,支持缩放,响应手势。
Material Dialogs,一款自定义Dialog
框架。
ViewPagerIndicator,基于ViewPager
的页面指示器开源框架,尽管已经五年未更新了,但你仍然可以在淘宝等app中看到它的使用场景。
PullToRefresh,为普通视图提供刷新UI的视图框架。具有强大的兼容能力,该框架支持ListView
,GrdiView
,WebViewScrollView
,ViewPager
等众多View增加刷新的能力,如果你有增加上拉加载,下拉加载的需求,你应该考虑它了!
FlexboxLayout,弹性伸缩布局,前端H5开发者转Android开发的福音,FlexboxLayout作为LinearLayout和RelativeLayout的替代者,值得各位一试,与其一同推出的还有ConstraintLayout。
SwipeLayout,非常强大滑动式布局,滑动删除是国产app常见需求,商品详情的上下滑动需求作为开发者的我们也经常遇到,SwipeLayout在github上拥有8K个star,证明它经受住了检验,各位值得一试。
MaterialDrawer,强大的塑料风格的抽屉框架,如果你还在犹豫上手SlidingMenu
遇到bug没人管的困境,那么你可以入手它作为你的抽屉布局。
ObservableScrollView,让视图滑动更具有视觉效果的滑动式框架,github上提供了12种滑动效果,你可以用它弥补其他框架的不足,提升你的App体验!
CircleImageView,圆角ImageView
控件,或许你已经听说过无数种展示圆角图片的方法,但如果你不尝试尝试CircleImageView,那么你的知识库会因为少了它黯然失色,有的时候完成需求是开发者优先考虑的,不同实现方法牵扯到的性能差异更值得让人深思,如果你有心在图片性能上有所涉猎,那么CircleImageView绝对不会让你败兴而归。最后别忘了记得去看Romain Guy的建议哟。
BottmBar,底部导航栏视图框架,底部栏里的王者框架,完全遵循材料设计规范,上手非常方便。如果说缺点,无法设置icon
与titile
的间距,无法自定义视图的大小等,但这些都可以通过修改源代码解决。
SlidingUpPanel,可拖动的滑动面板视图框架,如果你的项目需要一个可拖拽的滑动式面板(展示某些详情信息,播放音乐,地图信息等),那么推荐你使用它。
UItimateRecyclerView,提供刷新、加载更多、动画特效等额外能力的RecyclerView
框架,可以完成多item
式布局的大多数需求。
AndroidAutoLayout,提供适配能力的框架。
AFL——Android框架学习