自己总结的目前Android通用的流行框架大全

Android 通用流行框架大全


1、性能优化


1.1、内存泄漏检测(LeakCanary)

1.1.1、LeakCanary.install(this);//初始化

1.2、奔溃报告(ARCA Application Report For Android)

1.2.1、当你的程序奔溃时,会给开发者发送一个Report。即使程序没有奔溃,也会发送错误Report。


2、调试框架


2.1、Stetho(Facebook开发的工具)

2.1.1、 Stetho.initializeWithDefaults(this);
2.1.2、评价:android3.0后这个功能都直接集成在IDE中了。


3、测试框架

3.1、Mockito

3.1.1、mock测试就是在测试过程中,对那些不容易构建的对象用一个虚拟对象来代替测试的方法

3.2、Robotium

3.3、Robolectric


4、Log框架

4.1、Logger  使用方式:String userName = "Jerry"   Logger.i(userName);

4.1.1、线程的信息

4.1.2、类的信息

4.1.3、方法的信息

4.1.4、格式打印json、xml

4.1.5、点击链接跳转到源码打印处

//能够自由选择打印以上五种类型的信息

4.2、Hugo  使用方式:classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'

4.2.1、注解@DebugLog

4.3、Timer  使用方式:compile 'com.jakewharton.timber:timber:4.1.2'

4.3.1、在application里面的onCreate()里面注册


5、响应式编程

5.1、Rx系列   相关链接:http://gank.io/post/560e15be2dca930e00da1083

5.1.1、RxJava  (包含了四个对象 Observable  Observer  Subscribe  Event)

5.1.1.1、随着程序逻辑变得越来越复杂,它依然能够保持简洁

5.1.2、RxJavaJoins

5.1.3、RxAndroid

5.1.4、RxBinding

5.1.4.1、简介:是 Jake Wharton 的一个开源库,它提供了一套在 Android 平台上的基于 RxJava 的 Binding API。所谓 Binding,就是类似设置 OnClickListener 、设置 TextWatcher 这样的注册绑定对象的 API。

5.2、Agera  使用方式:compile 'com.google.android.agera:agera:1.0.0-rc2'

5.2.1、简介:类似于RxJava


6、事件总线

6.1、EventBus

6.1.1、简介:EventBus是一个消息总线,以观察者模式实现,用于简化程序的组件、线程通信,可以轻易切换线程、开辟线程。EventBus3.0跟先前版本的区别在于加入了annotation @Subscribe,取代了以前约定命名的方式。

6.1.2、一般使用方式:OnCreate()注册,OnDestroy反注册

6.2、Otto

6.2.1、简介:otto基于Guava项目的Android支持库,如果你在Android程序开发的过程中想要不同的组件之间进行有效的通信可以使用这个库。通过otto库可以降低程序之间的耦合性。

6.2.2、一般使用方式:@subscrible


7、后台处理

7.1、Tape

7.1.1、简介:一个轻快的、事务性的、基于文件的FIFO的库

7.2、Android Priority JobQueue  使用方式:compile 'com.birbit:android-priority-jobqueue:1.3.5'

7.2.1、简介:Android Priority Job Queue是一款专门为Android平台编写,实现了Job Queue的后台任务队列类库,能够轻松的在后台执行定时任务,提高用户体验和应用的稳定性。

7.2.2、比如有3个线程,在执行前三个job的OnAdd()方法,同时执行job1的OnRun()方法。



8、图标

8.1、WilliamChart

8.1.1、画图控件  开源源码:https://github.com/diogobernardino/WilliamChart

8.2、HelloCharts

8.2.1、简介:hellocharts是一个用来生成统计图表的三方库,目前支持折线图、柱状图和饼状图等常见图表。支持缩放、滑动和动画效果。是一个非常实用的Android平台的图标库

8.2.1.1、Line chart  线图

8.2.1.2、Column chart  柱形图

8.2.1.3、Pie chart 饼图

8.2.1.4、Bubble chart 泡泡图

8.2.1.5、Combo chart 柱图和线图的组合图

8.2.1.6、Preview charts 预览图

8.3、MPAndroidCharts

8.3.1、简介:支持线状图、柱状图、散点图、烛状图、气泡图、饼状图和蜘蛛网状图
支持缩放、拖动(平移)、选择和动画
适用于 Android 2.2 ( API 8 ) 和以上


9、依赖注入

9.1、ButterKnife

9.1.1、使用方式:@BindView(R.id.tv_a  TextView tv_a)

9.2、Dagger2

9.2.1、使用方式:dagger2是一个依赖注入框架,在编译期间自动生成代码,负责依赖对象的创建。

9.3、AndroidAnotations  使用方式:@EActivity   @ ViewById  @Click

9.3.1、使用依赖注入(Dependency Injection)

9.3.2、简化的线程模型(Simplified  threading model) 

9.3.3、事件绑定(Event binding)

9.3.4、REST Client

9.3.5、No Magic

9.4、RoboGuice

9.4.1、方便findViewById在XML中查找一个View,并将其强制转换到所需类型

9.4.2、check for null when you getIntent().getExtras()

9.4.3、Less code means fewer opportunities for bugs



10、缓存

10.1、DiskLruCache(Lru磁盘缓存)

10.1.1、防止多图OOM的核心解决思路

10.1.1.1、本地缓存路径  SD卡  /sdcard/Android/data//cache

10.1.1.2、本地缓存路径 本机   /data/data//cache

10.1.1.3、获取缓存地址:public File getDiskCacheDir(Context context, String uniqueName) {  
    String cachePath;  
    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())  
            || !Environment.isExternalStorageRemovable()) {  
        cachePath = context.getExternalCacheDir().getPath();  
    } else {  
        cachePath = context.getCacheDir().getPath();  
    }  
    return new File(cachePath + File.separator + uniqueName);  

10.1.1.4、获取当前版本号:public int getAppVersion(Context context) {  
    try {  
        PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);  
        return info.versionCode;  
    } catch (NameNotFoundException e) {  
        e.printStackTrace();  
    }  
    return 1;  


10.1.2、写入缓存

10.1.3、读取缓存

10.1.4、删除缓存


11、图片加载

11.1、Android Universal Image Loader

11.1.1、多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等

11.1.2、支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置

11.1.3、支持图片的内存缓存,文件系统缓存或者SD卡缓存

11.1.4、支持图片下载过程的监听

11.1.5、根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存

11.1.6、较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片

11.1.7、提供在较慢的网络下对图片进行加载

11.2、Picasso  使用方式:compile 'com.squareup.picasso:picasso:2.5.2' 

11.2.1、RequestHandler

11.2.2、BitmapHunter

11.2.3、PicassoDrawable

11.2.4、DeferredRequestCreator

11.2.5、Action

//以上为Picasso的主要类

11.3、Fresco
11.3.1、Image Pipeline  它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级磁盘)。

11.3.2、Drawees   它会在图片加载完成前显示占位图,加载成功后自动替换为目标图片。当图片不再显示在屏幕上时,它会及时地释放内存和空间占用。

//五个主要的功能

11.3.3、内存管理

11.3.4、图片加载

11.3.5、图片绘制

11.3.6、图片的渐进式呈现

11.3.7、动态加载

11.4、Glide   使用方式:compile 'com.github.bumptech.glide:glide:3.7.0'

11.4.1、Glide.with(context).resumeRequests()和 Glide.with(context).pauseRequests()     

  当列表在滑动的时候,调用pauseRequests()取消请求,滑动停止时,调用resumeRequests()恢复请求

11.4.2、Glide.clear()

当你想清除掉所有的图片加载请求时,这个方法可以帮助到你。

11.4.3、ListPreloader

如果你想让列表预加载的话,不妨试一下ListPreloader这个类。



12、图片处理

12.1、Picasso-transformations

12.1.1、基于Picasso的图片处理库,包括图片裁剪等

12.2、Glide-transformations

12.2.1、基于Glide的transformation库,拥有裁剪,着色,模糊,滤镜等多种转换效果

12.3、Android-gpuimage  使用方式:compile'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'

12.3.1、new GPUImageGrayscaleFilter() 滤镜处理,new一个对象为一种处理效果




13、网络解析

13.1、json解析

13.1.1、Gson

13.1.1.1、fromJson() 实现反序列化

13.1.1.2、toJson()  实现序列化

13.1.1.3、@SerializedName注解

13.1.2、Jackson

13.1.2.1、Streanming API

13.1.2.2、Tree Model

13.1.2.3、Data Binding

13.1.2.4、json 转换为 list:
 public static List jsonToList(String jsonStr,
            Class collectionClass, Class... elementClasses)
            throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        JavaType javaType = mapper.getTypeFactory().constructParametricType(
                collectionClass, elementClasses);

        return mapper.readValue(jsonStr, javaType);
    }

13.1.3、Fastjson  Alibaba开发的一个框架

13.1.3.1、快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)

13.1.3.2、强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)

13.1.3.3、 零依赖(没有依赖其它任何类库除了JDK)

13.2、html解析

13.2.1、HtmlParser

13.2.1.1、org.htmlparser      定义了htmlparser的一些基础类,其中最为重要的是Parser。Parser是htmlParser的最核心的类。

13.2.1.2、org.htmlparser.beans    对Visitor和Filter的方法进行了封装,定义了针对一些常用HTML元素操作的JavaBean,简化对常用元素的提取操作。包括:FilterBean、HTMLLinkBean、HTMLTextBean、LinkBean、StringBean、BeanyBaby等。

13.2.1.3、org.htmlparser.nodes      定义了基础的node,包括:AbstractNode、RemarkNode、TagNode、TextNode等。 Node是形成树结构表示HTML的基础,所有的数据表示都是接口Node的实现。

13.2.1.4、org.htmlparser.tags     定义了HtmlParser进行解析的网页中的各种标签。

13.2.1.5、org.htmlparser.filters      定义了各种过滤器filter,主要通过extractAllNodesThatMatch (NodeFilter filter)来对html页面指定类型的元素进行过滤,包括:AndFilter、CssSelectorNodeFilter、HasAttributeFilter、HasChildFilter、HasParentFilter、HasSiblingFilter、IsEqualFilter、LinkRegexFilter、LinkStringFilter、NodeClassFilter、NotFilter、OrFilter、RegexFilter、StringFilter、TagNameFilter、XorFilter

13.2.1.6、org.htmlparser.visitors    定义了各种访问者visitor,主要通过visitAllNodesWith (NodeVisitor visitor)来对html页面元素进行遍历,包括:HtmlPage、LinkFindingVisitor、NodeVisitor、ObjectFindingVisitor、StringFindingVisitor、TagFindingVisitor、TextExtractingVisitor、UrlModifyingVisitor

13.2.1.7、org.htmlparser.parserapplications      定义了一些实用的工具,包括LinkExtractor、SiteCapturer、StringExtractor、WikiCapturer,这几个类也可以作为HtmlParser使用样例。

13.2.1.8、org.htmlparser.tests      各种功能的单元测试用例,可作为HtmlParser使用的样例。

13.2.2、Jsoup   Jsoup是一款比较好的Java版HTML解析器。可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

13.2.2.1、从一个URL,文件或字符串中解析HTML

13.2.2.2、使用DOM或CSS选择器来查找、取出数据

13.2.2.3、可操作HTML元素、属性、文本



14、数据库

14.1、OrmLite(Object Relational Mapping)

14.2、SugarORM   使用方式: compile 'com.github.satyan:sugar:1.5' 

14.2.1、配置AndroidManifest.xml

14.2.2、创建实体类

14.2.3、保存entity   .save()

14.2.4、加载entity  .findById()

14.2.5、删除entity   .delete()

14.2.6、批量操作   .deleteAll()

14.3、GreenDAO   使用方式:classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'     差不多都是同样的操作  增删查改

14.4、ActiveAndroid    使用方式:compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'     一个开源的数据库框架

14.5、SQLBrite  一个响应式的数据查询框架  GitHub地址:https://github.com/square/sqlbrite

14.6、Realm  相关内容,查看官方文档

14.6.1、Realm

14.6.2、RealmConfiguration

14.6.3、RealmObject

14.6.4、RealmList

14.6.5、RealmQuery

14.6.6、RealmResults

14.7、Litepal  比较熟悉一个,也是比较熟练的一个   在项目中经常运用到这个框架   导入方便  操作方便




15、网络请求

15.1、Android Async HTTP

15.1.1、基本用法:
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String response) {
        System.out.println(response);
    }
});

15.1.2、AsyncHttpRequest    继承自Runnabler,被submit至线程池执行网络请求并发送start,success等消息

15.1.3、AsyncHttpResponseHandler     接收请求结果,一般重写onSuccess及onFailure接收请求成功或失败的消息,还有onStart,onFinish等消息

15.1.4、TextHttpResponseHandler    继承自AsyncHttpResponseHandler,只是重写了AsyncHttpResponseHandler的onSuccess和onFailure方法,将请求结果由byte数组转换为String

15.1.5、TextHttpResponseHandler     继承自TextHttpResponseHandler,同样是重写onSuccess和onFailure方法,将请求结果由String转换为JSONObject或JSONArray

15.1.6、BaseJsonHttpResponseHandler          继承自TextHttpResponseHandler,是一个泛型类,提供了parseResponse方法,子类需要提供实现,将请求结果解析成需要的类型,子类可以灵活地使用解析方法,可以直接原始解析,使用gson等。

15.1.7、 RequestParams    请求参数,可以添加普通的字符串参数,并可添加File,InputStream上传文件

15.1.8、AsyncHttpClient     核心类,使用HttpClient执行网络请求,提供了get,put,post,delete,head等请求方法,使用起来很简单,只需以url及RequestParams调用相应的方法即可,还可以选择性地传入Context,用于取消Content相关的请求,同时必须提供ResponseHandlerInterface(AsyncHttpResponseHandler继承自ResponseHandlerInterface)的实现类,一般为AsyncHttpResponseHandler的子类,AsyncHttpClient内部有一个线程池,当使用AsyncHttpClient执行网络请求时,最终都会调用sendRequest方法,在这个方法内部将请求参数封装成AsyncHttpRequest(继承自Runnable)交由内部的线程池执行。

15.1.9、SyncHttpClient     继承自AsyncHttpClient,同步执行网络请求,AsyncHttpClient把请求封装成AsyncHttpRequest后提交至线程池,SyncHttpClient把请求封装成AsyncHttpRequest后直接调用它的run方法。

15.2、AndroidAsync

15.3、OkHTTP    使用方式:https://github.com/square/okhttp

15.3.1、支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求

15.3.2、如果SPDY不可用,则通过连接池来减少请求延时

15.3.3、无缝的支持GZIP来减少数据流量

15.3.4、缓存响应数据来减少重复的网络请求

15.4、Retrofit   项目中经常用到的一个,很方便

15.5、Volley

15.5.1、Gson,图像等的异步下载,不用在去考虑图片下载的时候出现listview滚动过快,造成的没有必要的数据请求。

15.5.2、网络请求的排序

15.5.3、缓存的处理,代替了自己动手写,或者ImageLoader

15.5.4、多级别的取消求情

15.5.5、Activity结束时同时取消所有网络请求

你可能感兴趣的:(自己总结的目前Android通用的流行框架大全)