Android Image Loader 第三方库对比测试

预热知识

测试前,我们需要先明白这样一个问题

Java Heap / Native Heap 各自代表什么?

Bitmap 到底是分配在Java heap上 还是分配到了Native heap上

Java Heap 大小一般是多大,有限制吗?

Native Heap大小一般是多大,有限制吗?

Java OOM 一般是发生在什么时候,和Java Heap有关还是和 Native Heap有关

如果以上问题不是很清楚的话可以参考这个链接,自己恶补一下基础知识:Android进程的内存管理分析

关于上面的几个问题,这里可以小结一下:

Java Heap是对于Java 虚拟机而说的,一般的大小上限是 16M 24M 48M 76M 具体视手机而定。

Native Heap是对于C/C++直接操纵的系统堆内存,所以它的上限一般是具体RAM的2/3左右。

所以对于2G的手机而言,Java Heap 大概76M,而Native Heap是760M左右,相差10倍。

那么Android为啥这么吝啬,给Java Heap分配了这么点内存呢?

Google 既然这么做了,自然有他的道理: 这样设计的目的是为了让Android系统能同时让比较多的进程常驻内存,这样程序启动时就不用每次都重新加载到内存,能够给用户更快的响应。迫使每个应用程序使用较小的内存,移动设备非常有限的RAM就能使比较多的app常驻其中。

我们知道在大多数的Android APP中OOM大多数发生在加载多图片的时候,而很多人会认为Bitmap的实例构造是在JNI层完成的,所以也应该在Native层才对,其实不对,虽然在Native层完成,但是Bitmap的实例构造还是通过Android的虚拟机环境完成的,所以还是在Java Heap中。

对比测试

上面几个问题回答清楚了,接下来我们看看迄今为止比较火的几个Image Loader库

初始化状态

Fresco

Glide

UIL

Volley

Fresco+OkHttp

Picasso

小结

这里需要说清楚的是,其中并非都是静态图,还有大量的Gif动态图,所以,评测的平均加载时间就不太客观了,我们重点看一下上面我们提及的几个概念:

Java Heap 和 Native Heap

从上面的测试可以看出: Frasco/Frasco + OkHttp 表现的和其他几个迥异,前者会动态调整Native Heap而基本保持Java Heap 稳定, 其他几个是相反的。而Java Heap的增长会直接导致OOM的出现。所以可以肯定的说 Frasco可以有效的避免OOM,同时 Frasco还可以显示动态图以及其他特性

基于以上的测试可以发现,孰优孰劣, 一辩便知。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 06:02:27

Android Image Loader 第三方库对比测试的相关文章

Android中集成第三方库的方法和问题

声明: 1. 本文参考了网上同学们的现有成果,在此表示感谢,参考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决办法.第一,第二部分为参考网上同学们的成果加以整理而成. 3. 欢迎转载,交流,请尊重作者劳动成果:转载请注明出处,谢谢! Android中使用第三方库可能有两种:Java库.jar和原生库.so/.a,如果只是做上层APK开发,这两种库都可以通过Eclipse集成开发环境进行集成,如果是平台级开发,则都可通过源码集成.本文整理这两种集成方式使用步骤,以下假设

android studio 导入第三方库的记录

转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50493582 android studio 导入第三方库的记录.jar包 和 库 一.jar包 1.jar包的话非常easy,首先换成project模式.将你要用的jar包拷贝到lib以下.如图 2.然后右键选择Add as libary(多个jar也仅仅要随便选一个就这样加入就好了). 3.或者按住 shirt + ctrl + alt + s,然后按图所看到的选择文件加入. 二.

android项目引入第三方库工程出现的问题及解决方案

一.导入libar库工程 1.使用第三方库工程libary,基本上都是从github上下载,解压后里面有个libary文件夹 2.将libary导入到eclipse中,步骤如下 1)在eclipse包管理器中,右键点击import,进入 2)选择红色部分,点击next 3)将libary导入,且勾选[copy projects into workspace](必须勾选),点击完成 二.android工程引用libary 1.新建一个android工程Mytest 2.右键MyTest属性 3.操

Android Studio导入第三方库(SlidingMenu)教程

搞了半天,android的初学者,看着网上各种例子,特此记录. 注意:本教程针对像SlidingMenu这样使用Android Studio结构的第三方库. 开始: 第一步,去GitHub下载SlidingMenu (下载地址:https://github.com/jfeinstein10/SlidingMenu),下载下来在你的电脑上应该是这样样子的: 第二步,建立一个Android Studio项目: 第三步,在咱们的SlidingMenudemo项目里建立个model,这样就避免了好多教程

android studio 导入第三方库的方法

今天在导入第三方库的时候发生了一系列的错误,记录一下经验吧. 1.现将第三方*.jar或 *.aar包放到项目中的/app/libs 目录下.然后修改项目的 2.修改project 的build.gradle在 allprojects =>repositories 中添加如下,来设置导入目录 /***Adds an configures a repository which will look for dependencies in a number of local directories.*

使用Android Studio导入第三方库项目

在使用Android Studio开发时,用到了第三方库SlidingMenu(现在已经不推荐使用了),尽管如此,但具体怎么导入第三方库还是需要知道的,在查阅各种资料后,知道了一种比较容易可行的方法 具体步骤如下 1.首先,需要从GitHub上下载去SlidingMenu (https://github.com/jfeinstein10/SlidingMenu) 2.接下来在你的项目上右击New->Module(这样避免了修改gradle的繁琐步骤),然后选择Android Library 3.

Android Studio 导入第三方库,包括.so类

一般 Android 项目从 Eclipse 导入至 Android Studio(以下简称AS) 后,会出现各种问题,最主要的就是 "gradle" 目前为止还不支持 .so 库文件打包入 apk . 也就是说,如果你用的第三方库中包含 .so 文件 (一般是 libs\armeabi\ xxx.so ) , 那么只要在代码中出现 "System.loadLibrary( "xxx" ) ; 等代码出现,一定会在这里抛出异常 UnsatisfiedLin

Android Studio 导入第三方库y

一.导入jar包 (1).Copy你需要的jar包,到App目录下的lib文件夹 (2).选择你导入的jar包---->右键 ----->Add As Libaray (3).会出现 这个弹窗 (4).点击OK ,然后稍等几分钟,你的jar包下面出现一些子包时,就表示你添加成功了 二.添加库文件 (1).把你要的library文件Copy到与APP同级的目录下 (2).找到APP同级目录下的 settings.gradle ,加入你要引入的库文件 (3).找到App目录下的 build.gra

android studio添加第三方库

1 导入*.jar包 直接通过COPY/PAST 把你下载的jar文件添加到libs文件夹下 然后在libs文件夹和添加的*.jar文件下鼠标单击菜单 add as library 然后在选择项目单击Open Module Settings,在Dependencies中选择添加文件 这样就完成了jar文件添加 打开App目录下有个build.gradle文件应该项目结构文件,上述的动作只是为了在在文件下添加 dependencies { compile files('libs/android-s