每天学习一个Android中的常用框架——0.目录

1.前言

在2020年3月到4月的春招期间,通过不懈努力和几乎每天两三次的面试,我也是成功从最开始的Java服务端开发转向了Android客户端开发,说实话,相对于Java来说,Android的前景和发展潜力可能确实无法相比,所以这样的转方向更多是出于作者自身的兴趣使然。毕竟现在Android智能手机还是比较普遍的,而且做出Android应用就马上能在自己手机上运行起来的成就感确实要比较让人满足。
在春招收尾时,我也有陆续进行一些零散的学习——包括Android X新特性,自定义控件,MVP思想以及一些Android项目运行时的调优。可能是没有系统地进行学习,总感觉这些知识点在学习过后若只是简单使用,确实没有办法比较好地理解其精髓。
为了改正不良的学习习惯,这次打算以五一作为一个开头,进行为期一个月(或许会延长更久)的Android常用框架的自学。虽然每天只学习一个框架确实可能学不到其精髓,只能掌握其使用,但是接触广了,也会拓展自己的知识面,增强对于编程思想的理解。
作者将要学习的这些框架,大多都与Android相关,并且都是在Android开发中比较常用和常见的框架。为了记录学习历程,将以博客的形式记录。同时,作者会将学习框架时的demo整合成一个项目,放置到码云上(Github对于不翻墙用户实在是不友好)。此篇博客仅作为一系列学习框架的目录,读者若是对哪一个框架感兴趣,通过下一小节的超链接索引进入对应博客即可。
话不多说,赶紧开始学习吧!

强烈建议收藏这篇博客!以后若想查看某个框架的使用方法也比较方便!

2.环境

若没有特殊说明,该系列博客中所有的案例中,主要框架均使用了GitHub上提供的最新稳定版,另外,本地开发环境也基本上是最新的,现陈列出来,供读者进行参考和比对:

功能工具
IDEAndroid Studio 3.6
Android SDKAndroid X
Android NDK21
服务器TomCat 9
数据库SQLite
版本管理工具Gradle 5.6.4
Android Gradle Plugins3.6.1

3.目录

3.1 持久化

3.1.1 Litepal

LitePal,是一款开源的Android数据库框架,它采用了对象关系映射(0RM )的模式,并将我们平时开发最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和増删改查的操作。

每天学习一个Android中的常用框架——1.Litepal

3.1.2 GreenDao

GreenDao,是一款高效、快速的SQLite型数据库框架。

每天学习一个Android中的常用框架——2.greenDao

3.1.3 Realm

Realm,是一款移动端数据库框架,核心数据引擎由C++打造,比普通的Sqlite型数据库快的多。

3.1.4 DBFlow

DBFlow,是Android上使用的比较多的一个开源数据库,其特点是使用注解完成大部分内容的工作。

3.2 网络传输

3.2.1 OkHttp

OkHttp,是基于HTTP和HTTP2.0协议的网络框架,服务于Java和Android客户端。

每天学习一个Android中的常用框架——3.OkHttp

3.2.2 OkIo

OkIo,更加高效易用的IO库。作为OkHttp的底层IO库,Okio确实比传统的java输入输出流读写更加方便高效。Okio补充了java.iojava.nio的不足,使访问、存储和处理数据更加容易,它起初只是作为OKHttp的一个组件,现在你可以独立的使用它来解决一些IO问题。

每天学习一个Android中的常用框架——4.OkIo

3.2.3 Retrofit

Retrofit,是一款类型安全的网络框架,基于HTTP协议,服务于Android和Java端。

每天学习一个Android中的常用框架——5.Retrofit

3.2.4 Volley

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,这里就不再专门写一篇博客来讲解了。

3.2.5 Android Async Http

Android Async Http,基于Http协议的异步请求的网络框架。

3.3 注解开发

3.3.1 ButterKnife & Zelezny

ButterKnife,所提供了一种能力——使用注解生成模板代码,将view与方法和参数绑定,还提供了onclick绑定以及字符串的初始化。

Zelezny,是集成在Android Studio中使用ButterKnife的插件,可以快速生成相应代码。

每天学习一个Android中的常用框架——6.ButterKnife & Zelezny

3.3.2 IcePick

IcePick,简化开发框架,可以避免在Activity恢复时重新设置状态的麻烦。

每天学习一个Android中的常用框架——7.IcePick

3.3.3 Dagger

Dagger,通过依赖注入降低程序间耦合的开发框架。

每天学习一个Android中的常用框架——8.Dagger

3.3.4 xUtils(AFinal)

xUtils,作为在AFinal之上改善的注解开发框架,包含了orm, http(s), image, view注解, 但依然很轻量级(251K), 并且特性强大, 方便扩展。

每天学习一个Android中的常用框架——9.xUtils

3.3.5 Annotations

Annotations,基于注解的快速开发框架,与Butterknife一样基于注解,利用注解快速完成view的初始化,不同的是Annotations提供了更多的能力:简单的线程模型等。

3.4 图片加载

3.4.1 Glide

Glide,是专注于提供流畅划动能力的“图片加载和缓存框架”。

每天学习一个Android中的常用框架——10.Glide

3.4.2 Android Universal Image Loader

Android Universal Image Loader,在Glide之前,UIL作为图片加载的曾经的图片加载框架王者,Android开发老手都用过它。UIL与gilde最大区别是可定制,UIL提供了大量配置方式,图片加载状态的回调(成功,失败,进行中),加载动画等;以及提供了移动端图片加载框架的缓存思路:三级缓存策略(内存,sd卡,网络)。

经过作者测试,UIL已经无法兼容Android X,使用UIL会报出依赖冲突的错误,如下图所示:
在这里插入图片描述
或许UIL可以在低于Android X的版本下继续使用,但出于其已很长时间未维护的原因,因此就不再专门写一篇博客来记录了,有兴趣的读者可以参考UIL的官方GitHub上的文档:Android-Universal-Image-Loader,主要是参考ImageLoaderConfigurationDisplayImageOptions两个类在构造者模式下的配置条目。另外,若是确有需求需要使用UIL的读者,还可以参考此篇博客Android开源框架Universal-Image-Loader详解,此篇博客以全面地讲解了UIL,供有需要的读者查阅。

3.4.3 Picasso

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的用法。

3.4.4 Fresco

Fresco,可以管理图片内存的框架,facebook的出身证明了它并非是重复造的轮子,在管理图片内存领域上有着它的一片天地,渐进式加载、加载gif都是它独有的特性。

每天学习一个Android中的常用框架——11.Fresco

3.5 消息机制

3.5.1 Handler

Handler,作为Android官方提供的一个专门处理消息处理的机制,严格来说其实并不算框架。但是为了更好地理解接下来将要学习的消息处理框架EventBus以及RxJava,我们还是需要先把官方提供的这套机制理解透彻。

每天学习一个Android中的常用框架——12.Handler

3.5.2 AysncTask

AsyncTask,是除了Handler之外,Android提供给我们方便地在子线程中对UI进行操作的另一个工具。借助AsyncTask,即使你对异步消息处理机制完全不了解,也可以十分简单地从子线程切换到主线程。当然,AsyncTask背后的实现原理也是基于异步消息处理机制的,只是Android帮我们做了很好的封装而已。

每天学习一个Android中的常用框架——13.AsyncTask

3.5.3 EventBus

EventBus,本地组件间通信框架,在大型项目的ActivitiesFragmentsThreadsServices都可以看到它的使用场景,尽管EventBus在向未创建的组件传递事件时有些局限,仅适合在“活着的”组件间传递消息,但仍不妨碍它活跃在各个大型项目各个场景里。

每天学习一个Android中的常用框架——14.EventBus

3.5.4 RxJava(RxAndroid)

RxJava,是Java或Android客户端组件间异步通信的框架。

每天学习一个Android中的常用框架——15.RxJava

3.5.5 RxBinding

RxBinding,提供UI组件事件响应能力的框架,如果你还未开始RxAndroid之旅,RxBinding可以作为你的第一站,通过RXBinding,你将理解响应式编程的快乐,让项目里的事件流程更清晰。

3.5.6 Agera

Agera,服务于Android平台的响应式编程框架,Google专门推出一套响应式编程框架服务于Android开发者,相比于之响应式编程框架榜首的 RxJava/RxAndroid,它更轻量。

3.5.7 Otto

Otto,老旧且强大的事件总线框架。如今Square已经建议开发者采用RxJava/RxAndroid来代替Otto了。但Otto仍有与EventBus横向对比的价值,纵向来说,Otto与square自家开发的Rx系列框架的差异同样值得开发者们去探究。

3.6 数据解析

3.6.1 FastJson

FastJson,是基于json解析、生成的框架。从它的名字不难看出,快速是它最大的特性,阿里巴巴的出身保证了代码的质量和优越。

3.6.2 Gson

Gson,是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。

3.7 动画图表

3.7.1 Lottie

Lottie,可以在Android端快速展示Adobe Afeter Effect(AE)工具所作动画的框架,利用json文件快速实现动画效果是它最大的便利,而这个json文件也是由Adobe提供的After Effects(AE)工具制作的,在AE中装一个Bodymovin的插件,使用这个插件最终将动画效果生成json文件,这个json文件即可由LottieAnimationView解析并生成绚丽的动画效果。而且还支持跨平台。

3.7.2 Material Animations

Material Animations,提供场景转换过渡能力的动画框架,Material Animations提供的是场景切换的动画效果。Android官网sample中已经提供了部分Transition (转场动画)的展示,作为初学者很难快速拓展到自己的项目中,Material Animations的示例出现为开发者省去了此类麻烦,直接照搬应用到自己的App中吧。

3.7.3 ViewAnimations

ViewAnimations,提供可爱动画集合的框架,正如作者所说,它囊括了开发需求过程中所有的动画效果,集成进了这个简洁可爱的动画框架。

3.7.4 Gif Drawable

Gif Drawable,提供展示GIF动画能力的视图框架。

3.7.5 MPAndroidChart

MPAndroidChart,图表框架,以快速、简洁。强大著称。

3.8 插件化

3.8.1 Tinker

Tinker,是微信官网的Android热补丁解决方案。

3.8.2 DroidPlugin

DroidPlugin,热门的插件化开发框架,由360团队出品。

3.8.3 Dynamic Load Apk

Dynamic Load Apk,插件化开发框架,全面的文档介绍让你很快就能上手插件化开发。

3.8.4 Atlas

Atlas,淘宝推出的组件化开发框架,提供了解耦、组件、动态的开发能力。

3.9 测试框架

3.9.1 LeakCanary

LeakCanary,内存检测框架,服务于Java和Android客户端。方便,简洁是LeakCanary最大的特点,只需在应用的apllication中集成,就可以直接使用它。

3.9.2 Stetho

Stetho,提供在Chrome开发者工具上调试Android app能力的开源框架。上古时期Android程序员要调试本地数据库,需要进入Android Device Monitor找到/data/data/com.xxx.xxx/databases里面的db文件,导出到PC端,用PC的数据工具查看,现在使用Stetho省却了如此的麻烦;如今的Android程序员如果想调试网络请求响应过程中的报文段,需要在请求中加入Log语句,一个信息一个信息打印出来,相当繁琐,现在请使用Stetho,省却诸如此类的麻烦把!

3.9.3 Logger

Logger,让log日志优雅显示的框架,Logger作为调试框架,并未给出很强大的能力,它最大的亮点是优雅的输出log信息,并且支持多种格式:线程、JsonXmlListMap等,如果你整日沉迷于汪洋大海般的log信息不能自拔,Logger就是你的指路明灯!

3.10 辅助工具

3.10.1 Zxing

Zxing,条码图像处理库,专注于生成和解析二维码。

3.10.2 BaseRecyclerViewAdapterHelper

BaseRecyclerViewAdapterHelper,强大、流畅的Recyvlerview通用适配器,如果你是RecyclerView的拥簇者,就一定要体验这款专门服务该view的适配器。

3.10.3 Calligraphy

Calligraphy,自定义字体框架,如果你还在为一键修改App内所有字体样式而烦恼,Calligraphy就值得你拥有,它可以同时修改整个整个项目的Textview字体,也可以单独设置某个Textview的字体,还在等什么,快来试试吧!

3.10.4 ListViewAnimations

ListViewAnimations,为ListView提供动展示画效果能力的框架。

3.10.5 Recyclerview Animators

Recyclerview Animators,为Recyclerview提供扩展动画能力的框架。

3.10.6 uCrop

uCrop,优雅的图片裁剪框架。

3.10.7 Luban

Luban,最接近微信的图片压缩框架。

3.10.8 PermissionsDispatcher

PermissionsDispatcher,基于注解的提供解决运行时危险权限方案的框架。自Android 6.0,Google提出危险权限一词起,用户安全性被提到一定的高度,一些运行时对用户较为危险的权限将不再自动被开发者获取,需要经过用户批准,开发者才可以继续使用该权限,要想处理这些问题,可以尝试使用这个框架。

3.10.9 Icontify

Icontify,具有大量矢量图标和字体的第三方库,常常用作App瘦身计划中。

3.11 自定义控件

3.11.1 SlidingMenu

SlidingMenu,是侧滑菜单栏框架,与Android Userval Image loader 齐名的上古神器框架,可以为你的app提供侧滑菜单栏的功能;即使在Google推出了NavigationDrawer,仍然没有减少开发者对SildingMenu的拥簇,经典总是经得起考验的,这个上古框架已经四年没有更新了;

3.11.2 PhotoView

PhotoView,一款ImageView展示框架,支持缩放,响应手势。

3.11.3 Material Dialogs

Material Dialogs,一款自定义Dialog框架。

3.11.4 ViewPagerIndicator

ViewPagerIndicator,基于ViewPager的页面指示器开源框架,尽管已经五年未更新了,但你仍然可以在淘宝等app中看到它的使用场景。

3.11.5 PullToRefresh

PullToRefresh,为普通视图提供刷新UI的视图框架。具有强大的兼容能力,该框架支持ListViewGrdiViewWebViewScrollViewViewPager等众多View增加刷新的能力,如果你有增加上拉加载,下拉加载的需求,你应该考虑它了!

3.11.6 FlexboxLayout

FlexboxLayout,弹性伸缩布局,前端H5开发者转Android开发的福音,FlexboxLayout作为LinearLayout和RelativeLayout的替代者,值得各位一试,与其一同推出的还有ConstraintLayout。

3.11.7 SwipeLayout

SwipeLayout,非常强大滑动式布局,滑动删除是国产app常见需求,商品详情的上下滑动需求作为开发者的我们也经常遇到,SwipeLayout在github上拥有8K个star,证明它经受住了检验,各位值得一试。

3.11.8 MaterialDrawer

MaterialDrawer,强大的塑料风格的抽屉框架,如果你还在犹豫上手SlidingMenu遇到bug没人管的困境,那么你可以入手它作为你的抽屉布局。

3.11.9 ObservableScrollView

ObservableScrollView,让视图滑动更具有视觉效果的滑动式框架,github上提供了12种滑动效果,你可以用它弥补其他框架的不足,提升你的App体验!

3.11.10 CircleImageView

CircleImageView,圆角ImageView控件,或许你已经听说过无数种展示圆角图片的方法,但如果你不尝试尝试CircleImageView,那么你的知识库会因为少了它黯然失色,有的时候完成需求是开发者优先考虑的,不同实现方法牵扯到的性能差异更值得让人深思,如果你有心在图片性能上有所涉猎,那么CircleImageView绝对不会让你败兴而归。最后别忘了记得去看Romain Guy的建议哟。

3.11.11 BottmBar

BottmBar,底部导航栏视图框架,底部栏里的王者框架,完全遵循材料设计规范,上手非常方便。如果说缺点,无法设置icontitile的间距,无法自定义视图的大小等,但这些都可以通过修改源代码解决。

3.11.12 SlidingUpPanel

SlidingUpPanel,可拖动的滑动面板视图框架,如果你的项目需要一个可拖拽的滑动式面板(展示某些详情信息,播放音乐,地图信息等),那么推荐你使用它。

3.11.13 UItimateRecyclerView

UItimateRecyclerView,提供刷新、加载更多、动画特效等额外能力的RecyclerView框架,可以完成多item式布局的大多数需求。

3.11.14 AndroidAutoLayout

AndroidAutoLayout,提供适配能力的框架。

4.源码地址

AFL——Android框架学习


版权声明:本文为qq_41151659原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。