Displaying Bitmaps Efficiently 高效的显示图片

http://developer.android.com/training/displaying-bitmaps/index.html

这一课包含一些常用的处理和加载图片的技巧,这些技巧可以改善用户界面组件的响应,并且避免图片超出应用的内存限制。如果你不注意这些,图片会迅速的消耗掉你可用的内存预算,导致你的应用因为可怕的异常而奔溃:

java.lang.OutofMemoryError: bitmap size exceeds VM budget.

以下是一些Android应用中的加载图片会如此危险的原因:

  1.  移动设备的系统资源通常有限。Android设备中的单个应用可能只有16MB的内存可用。Android兼容性定义文件(CDD),第3.7.节“虚拟机的兼容性”给出了不同大小和密度屏幕中应用所需要的最少内存。应用必须在这个限制的内存大小中执行。但是,许多设备可能有更严格的限制。
  2.  Bitmap会消耗很多的内存,特别是对于那些类似照片的富内容图像。例如Galaxy Nexus的摄像头可以拍摄最大2592X1936像素(5百万像素)的照片。如果位图使用的是配置ARGB_8888(默认的Android 2.3开始),那么此图像加载到内存占用约19MB的内存(2592 *1936* 4字节),立即耗尽在某些设备上的单个应用程序的可用的内存。
  3. Android应用的界面经常一次性加载好几张位图。像ListViewGridViewViewPager这些组件通常屏幕上一次性显示多个图片,而且还预先加载了许多以应对用户可能的滑动操作。

Lessons

Loading Large Bitmaps Efficiently

This lesson walks you through decoding large bitmaps without exceeding the per application memory limit.

Processing Bitmaps Off the UI Thread

Bitmap processing (resizing, downloading from a remote source, etc.) should never take place on the main UI thread. This lesson walks you through processing bitmaps in a background thread usingAsyncTask and explains how to handle concurrency issues.

Caching Bitmaps

This lesson walks you through using a memory and disk bitmap cache to improve the responsiveness and fluidity of your UI when loading multiple bitmaps.

Displaying Bitmaps in Your UI

This lesson brings everything together, showing you how to load multiple bitmaps into components likeViewPager and GridView using a background thread and bitmap cache.

你可能感兴趣的:(android)