Android高性能加载大量图片[前言]

Android高性能加载大量图片[前言]


开发包含大量图片的Android App需要考虑哪些因素

在开始之前,以一系列的问题开场。


1.为什么要对图片进行压缩? 

2.为什么要引入图片缓存? 

3.为什么要管理图片内存?


我们先一一解答上面的问题。


1.我们知道Android的每一个App通常只拥有有限的系统资源,Android设备为每个App分配的内存大小是也是有上限的,当然了,针对不同的设备配置所分配的内存大小也是不一样的,最小为16MB。图片会占用大量的内存,尤其是那些超清照片。举个例子,Galaxy Neues这款设备拍摄出来的照片像素是2592*1936,如果图片每个像素的配置是ARGB_8888的,那么这张图片加载到内存中话将占用19MB左右的大小(2592*1936*4 bytes)。如果不做压缩处理,你能想象的出手机中系统自带的Gallery应用会内存溢出多少次吗?


2.加载网络图片如果不缓存,会引发很多问题。首先,假设你的App中有一个ListView中包含图片,不做缓存,在滑动的时候每次重复的去加载图片,给用户的感觉是你的应用比较慢,不够流畅。第二,你的用户每次打开应用都得重新加载图片。你祈祷你的用户在WIFI状态下,如果在数据流量下,你的应用消耗完了他的数据流量,小心他卸载你的App!最后,每次重复的从服务器加载图片会消耗大量的网络带宽,如果亿万用户,你得损失多少Money?假设一张图片20KB,你有100W用户,那么重复加载同一张图片一次的话,你得多消耗将近20GB的流量!仅仅是一张图片哦!如何你的用户微乎其微,OK,当我什么都没说。 


3.既然图片要缓存,可以缓存到内存中,也可以缓存到本地。内存就那么大,你不能无限制的缓存,App运行也需要内存空间呐。缓存到本地也是一样的,虽然说现在SD卡的容量越来越大,但是如果用户的SD卡中都是你应用产生的缓存文件,如果你是用户,你会是什么感受?立马卸载!


>上面提到不同设备为每个App分配的内存大小是不一样的,那么到底分配多少呢?请参考

http://source.android.com/compatibility/downloads.html(先!Ladies and Gentlemen )


OK,所有的疑问清除了,接下来我们就来研究一下如何现实这些功能。先列出课程体系,我们一一攻破!


课程结构


1.高效加载大图

>课程内容:将讲解在不导致应用内存溢出的情况下如何加载大图。


2.在非UI线程中处理图片

>课程内容:图片的处理(改变大小、加载网络图片等等)永远都不应该在UI线程(或主线程)中执行。这节课将给大家讲解如何使用AsyncTask类在子线程中处理图片,并且展示如何处理图片并发问题(有没有遇到ListView或者GridView中图片错乱的情况?这节课为你展示为什么会错乱以及如何解决)。


3.缓存图片

>课程内容:这节课手把手教你如何在开发包含大量图片的App中使用内存缓存和磁盘(通常指代SD卡)缓存图片来提高App的响应速度和流畅度。


4.管理图片内存

>课程内容:如何管理图片的内存来使你App的性能发挥到极致?这就是本节课将要讲解的内容。


5.在你的UI中加载图片

>课程内容:学完了前面4节课,终于到了一展拳脚的时候。这节课将整合前面所学的所有技术点,向你展示如何使用图片缓存在子线程中高效的加载大量的图片,并图片加载到像ListView、GridView和ViewPager这样的控件中。


是不是已经迫不及待了?赶紧动起来吧~

>本系列课程出自Android开发者官网,建议大家在学完之后细读一边英文原著,不仅能够提升英文水准,而且可以加深你对本系列课程的吸收。


原文链接:>[https://developer.android.com/training/displaying-bitmaps/index.html]


欢迎关注我的新浪微博和我交流:@Will_Edward

觉得这篇文章对你有用就顶我一下吧!Thanks!

你可能感兴趣的:(Android)