转载声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-) html
http://my.oschina.net/ryanhoo/blog/88153
java
译者:Ryan Hoo android
来源:https://developer.android.com/develop/index.html
缓存
译者按: 在Google最新的文档中,提供了一系列含金量至关高的教程。由于种种缘由而不为人知,真是惋惜!Ryan将会细心整理,将之翻译成中文,但愿对开发者有所帮助。 并发
本系列是Google关于展现大Bitmap(位图)的官方演示,能够有效的解决内存限制,更加有效的加载并显示图片,同时避免让人头疼的OOM(Out Of Memory)。
性能
------------------------------------------------------------------------------------- 学习
译文: 优化
这一系列教程覆盖了一些用于处理和加载Bitmap(位图)对象的经常使用技术,在某种程度上,使用这些技术可使你的用户接口(UI)组件保持良好的响应性能,而且避免超出程序内存限制。若是你不当心翼翼,这些位图对象能够迅速消耗你的可用内存,并引发严重的错误而致使程序崩溃: spa
java.lang.OutofMemoryError: bitmap size exceeds VM budget. .net
这里有一堆的缘由向你解释为何在Android应用中加载Bitmap会如此棘手:
· 移动设备通常只有有限的系统资源。Android设备为单个应用分配的可用内存仅为16M。在Android兼容性说明文档(Android Compatibility Definition Document(CDD))的3.7章————虚拟设备的兼容性中,给出了不一样屏幕尺寸和密度的手机所须要的最小内存。在有着最小内存限制条件下,应用应该对性能进行优化处理。可是请记住,不少设备的配置要高于这个限制。
· Bitmap(位图)尤为是一些像照片这种丰富的图片,须要占用大量的内存。例如,Galaxy Nexus摄像头拍摄的照片为2592*1936px(5百万像素)。若是使用ARGB_8888(Android2.3以前的默认配置)加载该位图,须要占用19M的内存(2592*1936*4),立马将一些设备的单个应用内存消耗一空。要解决这些问题,你须要学习以下课程:
-------------------------------------------------------------------------------------
第一课:高效地加载大Bitmap
这节课将带你贯穿各类以不超过应用的内存限制的方式解码大Bitmap。
第二课:在非UI线程中处理Bitmap
Bitmap处理(改变图片尺寸,远程下载等等)不该该在UI线程中进行。这节课将带你学习使用AsyncTask在后台线程进行图片处理而且阐述如何处理并发问题。
第三课:缓存Bitmap
这节课将教会你使用内存和硬盘两种方式缓存Bitmap来提高在加载多个Bitmap时UI的响应性和流畅性。
第四课:在你的UI中显示Bitmap
这节课将全部东西综合起来,向你展现如何使用后台线程和Bitmap缓存,加载多个Bitmap到ViewPager和GridView这样的组件中去。