‘壹’ Android之 glide 框架 解读
glide图片加载框架 其目的帮助我们在开发过程中对控件上的图片加载减压,它能够通过参数和方法加载 本地图片 网络图片 二进制等到控件上 还能够设置预加载以及加载出错时的错误提示图片,还能够对加载的图片进行缓存重复利用 可以缓存原始照片还能缓存经过压缩处理后谈并的照片,能够缓存到内存,或者硬盘,甚至正侍坦glide可以加载GIF动图还可以给加载的静态图片指定大小,对于 glide的缓存机制它用的是lru 这种缓存机制 其实就是 在一定举桐缓存空间内把最近用的以及重复用的排列在最高级 将最不常用没有重复使用的排在最低级 当有新实例出现,缓存空间不够用的情况下就会把被打有最低级标志的实例释放掉。
‘贰’ 想问一下在Android studio里面怎么实现显示网络图片,就是输入一个网址,显示一张图片
使用第三带好仔方图片加载蠢汪袜春框架如picasso,使用很简单,以下几步即可完成你的需求。
在app的build.gradle文件中添加依赖
implementation 'com.squareup.picasso:picasso:2.71828'
传入网络图片地址,以及要在哪个ImageView上显示
Picasso.get().load(imageurl).into(mImageView);
很简单,通过以上步骤,就可以完成在Android studio里面怎么实现显示网络图片,就是输入一个网址,显示一张图片。
‘叁’ Android图片加载及虚化效果
[TOC]
使用如下方式加载图片
会导致OOM,android对于直接通过资源id载入的资源需做cache,下次再需要此资源的时候直接从cache中得到。但这样做也造成了用过的资源都会在内存中,这样的设计不是很适合使用了很多大图片资源的应用,这样累积下来应用的内存峰值是很高的。
当使用诸如
imageView.setBackgroundResource
imageView.setImageResource
BitmapFactory.decodeResource
这样的方法来设置一张大图片时,在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。如果在读取时加上图片的Config参数,可以液饥有效减少加载的内碰孙存,从而有效阻止抛OOM异常。
实际使用中,可以针对bitmap做如下操作
RenderScript是Google在API11中引入的类,可看作业android内置的图片处理框架(区别于Glide等图片处理框架,RenderScript注重于图片的处理而不是加载)。RenderScript实际操作基于RenderScript Intrinsics,一些可以帮助RenderScript快速实现各种图片处理的操作类。该类包含诸多操作功能,比如利用ScriptIntrinsicBlur,就可以简单高效地实现高斯模糊效果,可通过参数radius设置虚化的程度。
1920*1080的原始图片未经压缩读取时间可能会超过1s,使用该图片作为背景图片加载时会有明显的卡顿。此时就需要设置BitmapFactory.Options实现对待加载图片的压缩。可参照 https://blog.csdn.net/u012124438/article/details/66087785 逐步优化Bitmap加载。对于加载图片较多较频繁的功能,建议使用第三方的图片加载框架,如Glide或者Picasso。
需要注意的是,此处doBlur有两个重载,可根据需要设置图片的缩放比例.这种方式和前文通过BitmapFactory.Options设置Bitmap取样格式的效果是一致的,都笑埋链是为了减小Bitmap加载的资源消耗,提高加载效率。
‘肆’ Android 实现Gif播放的七种方法
背景:在项目里某个需求实现的时候,有个图标有一个动画效果,为了达到UI要求的效果,试过多种方案,在这篇文章中讲一下这些方案的用法,以及结合项目的现状,做的一个方案选择。
Link: https://github.com/bumptech/glide
Glide是Android上比较常见的图片加载框架了,在Android上是数一数销蔽二的图片加载框架代表了,当然,早期的类似 ImageLoader , Picasso 这些,算是比较具有历史性的图片加载框架了。
Glide加载Gif的话,用到的是 GifDrawable 这个对象,一般我们用
去创建,唯斗穗当然,如果你加载的是 Bitmap 或 GifDrawable,你可以判断这个可绘制对象是否实现了 Animatable:
Link: https://github.com/koral--/android-gif-drawable
android-gif-drawable也是Android上比较火热的图片加载框架
这个库播放Gif用到的也是 pl.droidsonroids.gif.GifDrawableGifDrawable 对象,不像Glide,它的创建的方式比较简单
可以根据需求,选择不同的构造器创建对象
GifDrawable 实现了 Animatable 跟 MediaPlayerControl 接口,所以你可以使用他们各自的方法甚至更多
使用 MediaPlayerControl
MediaPlayer的标准控件(如VideoView)可用于控制GIF动画并显示其当前进度。
只需在 MediaController 上将 GifDrawable 设置为 MediaPlayer ,如下所示:
更多详细用法见 Github Usage
Link:android.jar-android.graphics.drawable
AnimatedImageDrawable是Android官方推出播放动图的类,优点是官方稳定高效,缺点是仅支持Android P版本(api=28)以上
使用方法也比较简单
Link:android.jar-android.graphics
android.graphics.Movie 也是Android自带的类,可以用来加载播放Gif动画,实现起来相对来说可能比较繁琐,官方已经将这个类标记为 @Deprecated {@link android.graphics.drawable.AnimatedImageDrawable} ,但还是有必要讲下。
主要的构造方法有:
按来源分别可以从Gif文件的输入指卜流,文件路径,字节数组中得到Movie的实列。然后我们可以通过操作Movie对象来操作Gif文件。
下面介绍下几个方法:
关键是Movie官方没有给出回调监听,故我们需要手动做监听。
有兴趣的可以看这一篇文章,写的很不错。 Android自定义View播放Gif动画
当然,除了这些之外,还有跨平台的解决方案,比起传统的gif文件, Lottie 则是使用json文件来代表动画源文件。
Lottie 对APK的影响有多大?
Add the dependency to your project build.gradle file:
核心类:
加载动画:
Lottie 可以加载动画来自:
最简单的形式就是使用 LottieAnimationView :
推荐使用 lottie_rawRes ,相对于使用指定的字符串文件名,你可以使用通过 R 文件以静态的引用形式指定你的动画文件.
更多详细介绍及用法见 官方文档
Link: https://android.googlesource.com/platform/frameworks/ex/+/android-5.0.2_r1/framesequence
FrameSequenceDrawable 更多的是对webp格式的一个支持,所以当要使用时,需要将你的gif转为webp
来看下主要的构造方法:
使用方法如下:
[Facebook/Fresco] ( https://github.com/facebook/fresco ) 也支持gif的加载,大同小异,这里就不再过多介绍了。
Glide在部分设备上遇到了Gif变慢的问题,详见 issues_2471
考虑到项目已经集成了Glide了,就不打算再继续引入第三方的库了。又因为原素材的问题,无法导出Lottie格式的json文件。
故这一块当时做的就是 >=androidP 用AnimatedImageDrawable,<androidP 就用Glide,仅供参考。
‘伍’ 安卓图片选择框架Matisse的使用
本文介绍图片选择框架Matisse的使用,实现扮粗此图片的选择及使用相机进行拍摄,最后将选择或拍摄的照片显示在activity中。
这里仅凳吵做使用介绍,不做深入研究。
主要涉及处理安卓6.0权限的动态获取,这里使用rxpermissions
本文目录
1、github地址
2、项目结构
3、使用效果
4、使用准备
1)项目依赖
2)AndroidManifest.xml文件
3)filepaths.xml文件
4)添加Glide引擎
5、MainActivity中使用
6、参考
Matisse: https://github.com/hu/Matisse
RxPermissions: https://github.com/tbruyelle/RxPermissions
根目录build.gradle添加
app的build.gradle添加
注意添加的权限及provider
注意:
的值要与 MainActivity 中使用的值一致,不一定要包名。
AndroidManifest.xml 中 android:resource="@xml/filepaths" 主要是拍摄照片后的路径的设置,需要厅迅在 res 文件夹下添加 xml 文件夹,然后添加 filepaths.xml
activity_main.xml
Android随笔——Matisse的完整使用
图片选择器 Matisse 在 6.0 以上手机使用相机以及选择图片过滤小图功能
利用FileProvider建立文件分享
Matisse 知乎图片选择框架
‘陆’ 如何开发Android应用框架
在Android开发中能够知道和使用一些好用的第三方支持,省去自己的很多时间,下面涉及到的多为经过历史兴衰与检验的,江山代有人才出一代更比一代强,有些已经被更新更好用的所取代,但也很多地方仍可圈滑模可点不乏参考,有些依然经典,整理出来请君一参.欢迎大家的指正,补充与交流.
1、AndBase框架
项目地址: https://code.jd.com/zhaoqp2010_m/andbase
1.andbase中包含了大量的开发常用手段。
如网络下载,多线程与线程池的管理,数据库ORM,图片缓存管理,图片文件下载上传,Http请求工具,常用工具类(字符串,日期,文件处理,图片处理工具类等),能够使您的应用在团队开发中减少冗余代码,很大的提高了代码的维护性与开发高效性,能很好的规避由于开发疏忽而导致常犯的错误。
2.andbase封装了大量的常用控件。
如list分页,下拉刷新,图片轮播,表格,多线程下载器,侧边栏,图片上传,轮子选择,图表,Tab滑动,日历选择器等。
3.强大的AbActivity,您没有理由不继承它。
继承它你能够获得一个简单强大可设置的操作栏,以及一系列的简单调用,如弹出框,提示框,进度框,副亩让没操作栏等。
4.提供效率较高图片缓存管理策略,使内存大幅度节省,利用率提高,效率提高。
程序中要管理大量的图片资源,andbase提供简单的方法,几步完成下载与显示,并支持缩放,裁剪,缓存功能。
5.封装了大量常见工具类。
包括日期,字符,文件,图片等各种处理函数, 多而全。
6.用andbase大量减少handler的使用,而采用回调函数,代码更整洁。
handler会产生大量代码,迅纳并且不好维护,andbase对handler进行了封装。
7.简单轻量支持注解自动建表的ORM框架(支持一/多对多的关联操作)。
写sql,建表,工作量大,andbase提供更傻瓜异步增删改查工具类。
8.异步请求http框架,网络请求标准化,支持文件上传下载,get,post,进度显示。
包含了异步与http请求的工具类,实用。
2、XUtil框架
项目地址:https://github.com/wyouflf/xUtils
主要有四大模块:
(1) 数据库模块:Android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
(3) 网络模块:支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
(4) 图片缓存模块:加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
3、ThinkAndroid框架
项目地址:https://github.com/white-cat/ThinkAndroid
主要有以下模块:
(1) MVC模块:实现视图与模型的分离。
(2) ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。
(3) 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
(4) http模块:通过httpclient进行封装http数据请求,支持异步及同步方式加载。
(5) 缓存模块:通过简单的配置及设计可以很好的实现缓存,对缓存可以随意的配置
(6) 图片缓存模块:imageview加载图片的时候无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
(7) 配置器模块:可以对简易的实现配对配置的操作,目前配置文件可以支持Preference、Properties对配置进行存取。
(8) 日志打印模块:可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印
(9) 下载器模块:可以简单的实现多线程下载、后台下载、断点续传、对下载进行控制、如开始、暂停、删除等等。
(10) 网络状态检测模块:当网络状态改变时,对其进行检
4、LoonAndroid
项目地址:https://github.com/gdpancheng/LoonAndroid
主要有以下模块:
(1) 自动注入框架(只需要继承框架内的application既可)
(2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)
(3) 网络请求模块(继承了基本上现在所有的http请求)
(4) eventbus(集成一个开源的框架)
(5) 验证框架(集成开源框架)
(6) json解析(支持解析成集合或者对象)
(7) 数据库(不知道是哪位写的 忘记了)
(8) 多线程断点下载(自动判断是否支持多线程,判断是否是重定向)
(9) 自动更新模块
(10) 一系列工具类
5、volley
项目地址 :https://github.com/smanikandan14/Volley-demo
(1) JSON,图像等的异步下载;
(2) 网络请求的排序(scheling)
(3) 网络请求的优先级处理
(4) 缓存
(5) 多级别取消请求
(6) 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)
6、android-async-http
项目地址:https://github.com/loopj/android-async-http
文档介绍:http://loopj.com/android-async-http/
(1) 在匿名回调中处理请求结果
(2) 在UI线程外进行http请求
(3) 文件断点上传
(4) 智能重试
(5) 默认gzip压缩
(6) 支持解析成Json格式
(7) 可将Cookies持久化到SharedPreferences
7、Afinal框架
项目地址:https://github.com/yangfuhai/afinal
主要有四大模块:
(1) 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。
(3) 网络模块:通过httpclient进行封装http数据请求,支持ajax方式加载,支持下载、上传文件功能。
(4) 图片缓存模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法,
没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),
更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器,
在imageview显示图片的时候播放动画等(默认是渐变动画显示)。
总结框架结构,
ImageLoader框架(第8大框架)
UniversalImageLoader是用于加载图片的一个开源项目,在其项目介绍中是这么写的,
支持多线程图片加载
提供丰富的细节配置,比如线程池大小,HTPP请求项,内存和磁盘缓存,图片显示时的参数配置等等;
提供双缓存
支持加载过程的监听;
提供图片的个性化显示配置接口;
Widget支持(这个,个人觉得没必要写进来,不过尊重原文)
其他类似的项目也有很多,但这个作为github上着名的开源项目被广泛使用。第三方的包虽然好用省力,可以有效避免重复造轮子,但是却隐藏了一些开发上的细节,如果不关注其内部实现,那么将不利于开发人员掌握核心技术,当然也谈不上更好的使用它,计划分析项目的集成使用和低层实现。
开源框架android-async-http(第9大框架)
官网:https://github.com/loopj/android-async-http
Android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也简单,详细请看官网:
到官网下载zip包,解压,里面有完整的代码和各种版本的jar包和demo,源码在library里面,jar包在releases里面。项目更新速度很快,老版本的回调是一个普通类,最新版是一个接口。
KJFrameForAndroid框架(第10大框架)
参考:http://www.codeceo.com/article/android-orm-kjframeforandroid.html
KJFrameForAndroid是一款基于Android的ORM和 IOC应用开发框架,封装了很多Android开发中常用的功能,包括Android中对Bitmap的操作类库。KJFrameForAndroid的设计非常精简,利用KJFrameForAndroid,我们可以用最少的代码完成很多丰富的Android功能应用,为Android开发者节省许多不必要的开发时间。
KJFrameForAndroid总共分为五大模块:UILibrary,UtilsLibrary,HttpLibrary,BitmapLibrary,DBLibrary。
Android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也简单,详细请看官网:
到官网下载zip包,解压,里面有完整的代码和各种版本的jar包和demo,源码在library里面,jar包在releases里面。项目更新速度很快,老版本的回调是一个普通类,最新版是一个接口。
‘柒’ Android图片框架对比
对比现在主流图片框架的优势和缺点,在实际项目中如何选择适合自己的框架;
Glide、孝胡Fresco、Picasso、ImageLoader
共同优点:
以上名词介绍
在分析他们的差异、优缺点之前,我们先了解图片缓存通用的概念:
以上概念在不同框架之间可能不同,比如Displayer在ImageLoader中叫做ImageAware,在Picasso和Glide中叫做Target。
以上为Glide的总体设计图。
整个库分为RequestManager(请求管理器)、Engine(数据获取引擎)、Fetcher(数据获取器)、MemoryCache(内存缓存)、DiskLRUCache(本地缓存)、Transformation(图片处理)、Encoder(编码处理)、Registry(图片类型以及解析器配置)、Target(目标)等模块。
简单流程: Glider收到加载及显示资源任务,创建Request并将它交给RequestManager,Request启动Engine去数据源获取资源,得到资含宴源后通过Transformation处理后交给Target.
Glide依赖DiskLRUCache、GifDecoder等开源库去完成本地缓存和Gif图片解密工作;
为Bitmap 维护一个BitmapPool对象池, 对象池的主要目的是通过减少大对象的分配以重用来提高性能!
缺点 :
①图片质量低:因为机制不同,速度快,但是图片的质量降低了RGB565;
②多尺寸缓存导致内存和磁盘占用多:根据ImageView大小来缓存,可能会导致一张图片可能根据展示情况来缓存不同尺寸的几份;
扩展理解参考: https://www.jianshu.com/p/1ab5597af607
以上为Picasso的总体设计图。
整个库分为Dispatcher、RequestHandler以及Downloader、PicassoDrawable等模块。
简单流程: Picasso收到加载显示图片任务后,创建Request并将它交给Dispatcher,Dispatcher分发任务到具体RequestHandler,任务通过MemoryCache及Handler(数据获取接口)获取图片,图片获取成功后通过PicassoDrawable显示到Target中;
上面Data的File system部分,Picasso没有自定义本地缓存的接口,默认使用http的本地缓存,API19以上使用okhttp,一下使用UrlConnection,所以如果需要自定义本地缓存就需要自定义Downloader;
缺点 :加载速度没有其他框架快;
特点 :只缓存一个全尺寸的图片,根据需求的大小在压缩转换;
以上为Fresco的总体设计图
整个库分为UI:DraweeView(View控件)、Drawable(图片数据)、DraweeController(图片控制器)、DraweeHiierarchy(图片体系);Core:DataSource(数据源)、ImagePipeline(图像管道)、Procer(生产者)、ProcerFacotry(生产工厂)、Subcriber(订阅)、Supplier(供应者)、Consumer(消费者);IO/Data:MemoryCache(内存缓存)、Network、DiskCache(磁盘缓存)、Recourse(本地资源)
简单流程: 从上面的结构可以看出,fresco主要采用了工厂+建造者的模式实现功能,逻辑划分比较巧老拦清楚;Fresco框架整体是一个MVC模式,DrawableView--->View用来显示顶层视图、DrawableController--->Control控制加载图片的配置 事件的分发、DrawableHierarchy--->Model 用于存储和描述图片信息,同时也封装了一些图片的显示和视图层级的方法;ImagePipeline模块负责从网络、本地文件系统、本地资源加载图片
缺点:
①框架大,影响Apk体积;
②一定的学习成本,使用比较繁琐,需要使用内部提供的ImageView控件,使用起来比较复杂;
‘捌’ Android 图片加载(一)高效加载Bitmap 基础篇
由于Bitmap的特殊性以及Android对单个应用所规定的最大内存限制,我们在同时加载大量Bitmap时很容易发生内存溢出,即我们通常所说的OutOfMemoryError(OOM),因此高效加载Bitmap就成为了每个Android开发者的必备技能。
在学习如何高效地加载Bitmap之前,首先介绍一下如何加载一个Bitmap。我们都知道,Bitmap在Android中通常指的是一张图片,那么如何将JPG、PNG等格式的图片转换成Bitmap对象呢?BitmapFactory类给我们提滚埋供了一些方法:
接下来开始介绍如何高效地加载Bitmap,其实核心思想很简单: 就是采用BitmapFactory.Options参数来调整图片尺寸来适配控件的大小。
假如我们显示图片的控件ImageView宽高为100×100像素,而图片的尺寸为1024×1024像素,这个时候如果将饥备源整个图片加载进来并显示到控件上,自然是很占用内存资源的。这个时候可以通过BitmapFactory.Options按一定的采样率加载缩小后的图片,再将缩小后的图片烂态显示到ImageView中,这样就能减小内存占用从而在一定程度上避免OOM的发生。
通过BitmapFactory.Options来缩放图片,主要是使用它的inSampleSize参数,也就是前面提到的采样率。当采样率inSampleSize为1时,采样后的图片大小为原图大小;当采样率inSampleSize>1,比如为2时,采样后的图片宽高都为原图的1/2,即像素降为原图的1/4,占用的内存大小也就是原图的1/4;比较特殊的是,当采样率inSampleSize<1时,系统会自动将该值当做1来处理。 因此可以得出一个结论:采样率inSampleSize必须是大于1的整数图片才会有缩小的效果,并且采样率同时作用于宽高,也就是说采样后的图片会缩小到原图的1/(inSampleSize^2)。比如inSampleSize=4,那么缩放比例为1/16。
我们现在知道了,通过采样率可以提高图片的加载效率,那么如何才能计算出最合适的采样率?我们可以按照如下流程:
接下来以decodeFile方法为例实现图片的缩放,其他三个方法处理方式类似。
下一篇: Android 图片加载(二)图片加载框架Glide 入门篇
《Android开发艺术探索》
‘玖’ 现在安卓用什么框架
1、volley
项目地址 https://github.com/smanikandan14/Volley-demo
(1) JSON,图像等的异步下载;
(2) 网络请求的排序(scheling)
(3) 网络请求的优先级处理
(4) 缓存
(5) 多级别取消请求
(6) 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)
2、android-async-http
项目地址:https://github.com/loopj/android-async-http
文档介绍:http://loopj.com/android-async-http/
(1) 在匿名回调中处理请求结果
(2) 在UI线程外进行http请求
(3) 文件断点上传
(4) 智能重试
(5) 默认gzip压缩
(6) 支持解析成Json格式
(7) 可将Cookies持久化到SharedPreferences
3、Afinal框架
项目地址:https://github.com/yangfuhai/afinal
主要有四大模块:
(1) 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。
(3) 网络模块:通过httpclient进行封装http数据请求,支持ajax方式加载,支持下载、上传文件功能。
(4) 图片缓存模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出搭闹现的oom和android容器快速滑动时候出现的图片错位等现象。
FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法,
没有使用弱引用(android2.3以后google已经岁衡不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),
更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器,
在imageview显示图片的时候播放动画等(默认是渐变动画显示)。
4、xUtils框架
项目地址:https://github.com/wyouflf/xUtils
主要有四大模块:
(1) 数据库模块:android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外知雀罩键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
(3) 网络模块:支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
(4) 图片缓存模块:加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
5、ThinkAndroid
项目地址:https://github.com/white-cat/ThinkAndroid
主要有以下模块:
(1) MVC模块:实现视图与模型的分离。
(2) ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。
(3) 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
(4) http模块:通过httpclient进行封装http数据请求,支持异步及同步方式加载。
(5) 缓存模块:通过简单的配置及设计可以很好的实现缓存,对缓存可以随意的配置
(6) 图片缓存模块:imageview加载图片的时候无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
(7) 配置器模块:可以对简易的实现配对配置的操作,目前配置文件可以支持Preference、Properties对配置进行存取。
(8) 日志打印模块:可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印
(9) 下载器模块:可以简单的实现多线程下载、后台下载、断点续传、对下载进行控制、如开始、暂停、删除等等。
(10) 网络状态检测模块:当网络状态改变时,对其进行检
6、LoonAndroid
项目地址:https://github.com/gdpancheng/LoonAndroid
主要有以下模块:
(1) 自动注入框架(只需要继承框架内的application既可)
(2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)
(3) 网络请求模块(继承了基本上现在所有的http请求)
(4) eventbus(集成一个开源的框架)
(5) 验证框架(集成开源框架)
(6) json解析(支持解析成集合或者对象)
(7) 数据库(不知道是哪位写的 忘记了)
(8) 多线程断点下载(自动判断是否支持多线程,判断是否是重定向)
(9) 自动更新模块
(10) 一系列工具类