#### 一种情况
1. 对于图片显示:根据需要显示图片控件的大小对图片进行压缩显示。
2. 果图片数量非常多:则会使用LruCache等缓存机制,将所有图片占据的内容维持在一个范围内
#### 另一种情况
单个图片非常巨大,并且还不允许压缩
首先不压缩,按照原图尺寸加载,那么屏幕肯定是不够大的,并且考虑到内存的情况,不可能一次性整图加载到内存中,所以肯定是局部加载,那么就需要用到一个类:
BitmapRegionDecoder
其次,既然屏幕显示不完,那么最起码要添加一个上下左右拖动的手势,让用户可以拖动查看。
去自定义一个显示巨图的View,支持用户去拖动查看
Glide 和 Picasso 可以说是目前 Android 上最流行的图片加载库了。大部分安卓应用开发人员都有使用过这两个库在他们的开发工作中。这两个库也都确实提供了大量图片加载的功能,而且也都经过了很多应用的检验,是可靠可信的。表面看上去似乎两者工作原理很相似,但是实际上是有着很大差别的,主要体现在下面几个方面:
1. 下载图片的方式
2. 图片的缓存机制
3. 加载到内存的机制
### 缓存大小
两个库也都支持缓存图片,都通过下载图片后,缓存到本地。但是这里对于缓存本地的机制,两个库是完全不同的做法。
**Picasso** 是下载图片然后缓存完整的大小到本地,比如说图片的大小是1080p的,之后如果我需要同一张图片,就会返回这张 full size 的,如果我需要resize,也是对这种 full size 的做 resize。
**Glide** 则是完全不一样的做法。Glide 是会先下载图片,然后改变图片的大小,以适应 imageView 的要求,然后缓存到本地。 所以如果你是下载同一张图片,但是设定两个不一样大小的 imageView, 那么Glide 实际上是会缓存两份。
换个角度来看,这里不仅仅是缓存的问题,比如一个 ImageView 要改变它的大小,PIcasso 就只需要下载一次 full size 的图片,但是 Glide 实际上就不仅仅是下载一次了,它需要去单独下载然后改变大小适配 imageView,因为对于 Glide 来讲,需要缓存不同大小的同一张图片。
### 内存的使用
Glide 默认是用的 RGB_555 的设定,PIcasso 则是用的 ARGB _8888的设定。
### 加载图片的时间
当尝试加载一个图片的时候,两个库都会采用先从缓存中读取,如果缓存中没有,再去下载的做法。
实际试验中,Picasso 会比 Glide 快一点。猜测可能的原因还是因为之前讲到的缓存机制导致,因为Picasso 是直接把图加载到内存中,而 Glide 则需要改变图片大小再加载到内存中去。这个应该是会耗费一定的时间。
但是,当加载图片从内存中的时候,Glide 则比 Picasso 要快。其原理还是因为缓存机制的区别。因为Picasso 从缓存中拿到的图片,还要先去 resize 后,然后设定给 imageView,但是 Glide 则不需要这样。
### 其他功能的对比
1. GIF 支持:Glide 支持 GIF。 对于加载 GIF 来说,Glide 只需要简单使用 Glide.with(...).load(...)。 但是 Picasso 是不支持的,因此如果你的应用中是需要加载 GIF 的话,那就只能用 Glide 了。
2. 灵活性:Glide 提供了非常多的配置,你可以非常灵活的根据你的需求来客制化,从而缩减 Glide 库的大小等。
## Glide和Picasso他们的对比的优缺点
#### 1.Picasso和Glide的withi后面的参数不同
Picasso.with(这里只能传入上下文) .
Glide.with,后面可以传入上下文,activity实例,FragmentActivity实例,Fragement.传入的对象要比前者多.
#### 2.加载后图片质量不同
Picasso采用的ARGB-8888,Glide采用的是RGB-565
相对而言,Picasso加载的是全图,图片质量和清晰对要比Glide的要高,但是,因为加载的采样率过高,导致,出现OOM异常的概率要比Glide要大很多.
#### 3.加载Gif图片(备注:Gif图片消耗太对内存,尽量谨慎使用):
Picasso不能加载git图片
Glide可以加载缓存图片
#### 4.缓存策略和加载速度.
Picasso缓存的是全尺寸,而 Glide的缓存的更ImageView的尺寸相同.
讲ImageView调整为不同的大小,不管大小如何设置,Picasso只缓存一个全尺寸的,Glide则不同,他会为每种大小不一致的ImageView都缓存一次.
Glide的这个特点,让加载显得特别的快,而Picasso则因为需要在显示之前重新调整大小而导致一些延迟,(即便是添加了noFade)
#### 5.总结:
Glide比Picasso加载速度要快,其实他是在Picasso的基础上进行了第二次封装,但是Glide比Picasso需要更多的空间来缓存;Glide加载图像以及磁盘缓存的方式,都优于Picasso,且Glide更有利于减少OutOfMemoryError的发生;
Gif动画,是Glide的杀手锏.
Android面试题
Handler
网络请求框架
图片处理框架Picasso,Glide
Android最佳性能实践OOM
异步:RxJava,AsyncTask
View,ViewGroup事件分发
消息传递:EventBus
HTTPS和HTTP的区别
进程间通信的方式
HttpClient与HttpUrlConnection的区别
Java多线程
Fragment状态保持和恢复
讲解一下Context
java虚拟机和Dalvik虚拟机的区别
线程sleep和wait有什么区别
保存Activity状态
WebView与js交互(调用哪些API)
内存泄露检测,内存性能优化
自定义view和动画
设计模式(单例,工厂,观察者。作用,使用场景)
String,Stringbuffer,Stringbuilder 区别
开源框架,为什么使用,与别的有什么区别
Android大厂面试题
共同问到的
框架MVC、MVP、MVVM
sleep和wait有什么区别
React Native原理
React Native面试题
Android开发
Java基础
面向对象思想
Android SDK
Activity
Service
Broadcastreceiver
Contentprovider
ActionBar
Fragment
数据持久化
第三方扩展
2018 Java面试题
Android(2017-2018)BAT面试题整理
2017下半年,一二线互联网公司Android面试题汇总
2018阿里Android面试题