2012-04-04 17:45:24 -07:00
|
|
|
|
page.title=Displaying Bitmaps Efficiently
|
2013-03-11 13:52:35 -07:00
|
|
|
|
page.tags="bitmaps","images","graphics"
|
2012-04-04 17:45:24 -07:00
|
|
|
|
|
|
|
|
|
trainingnavtop=true
|
|
|
|
|
startpage=true
|
|
|
|
|
|
|
|
|
|
@jd:body
|
|
|
|
|
|
|
|
|
|
<div id="tb-wrapper">
|
|
|
|
|
<div id="tb">
|
|
|
|
|
|
|
|
|
|
<h2>Dependencies and prerequisites</h2>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>Android 2.1 (API Level 7) or higher</li>
|
2012-06-21 17:14:39 -07:00
|
|
|
|
<li><a href="{@docRoot}tools/extras/support-library.html">Support Library</a></li>
|
2012-04-04 17:45:24 -07:00
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<h2>Try it out</h2>
|
|
|
|
|
|
|
|
|
|
<div class="download-box">
|
|
|
|
|
<a href="{@docRoot}shareables/training/BitmapFun.zip" class="button">Download the sample</a>
|
|
|
|
|
<p class="filename">BitmapFun.zip</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2013-03-04 15:25:40 -08:00
|
|
|
|
<p>Learn how to use common techniques to process and load {@link
|
2012-04-04 17:45:24 -07:00
|
|
|
|
android.graphics.Bitmap} objects in a way that keeps your user interface (UI) components responsive
|
|
|
|
|
and avoids exceeding your application memory limit. If you're not careful, bitmaps can quickly
|
|
|
|
|
consume your available memory budget leading to an application crash due to the dreaded
|
|
|
|
|
exception:<br />{@code java.lang.OutofMemoryError: bitmap size exceeds VM budget}.</p>
|
|
|
|
|
|
|
|
|
|
<p>There are a number of reasons why loading bitmaps in your Android application is tricky:</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
|
<li>Mobile devices typically have constrained system resources. Android devices can have as little
|
|
|
|
|
as 16MB of memory available to a single application. The <a
|
|
|
|
|
href="http://source.android.com/compatibility/downloads.html">Android Compatibility Definition
|
|
|
|
|
Document</a> (CDD), <i>Section 3.7. Virtual Machine Compatibility</i> gives the required minimum
|
|
|
|
|
application memory for various screen sizes and densities. Applications should be optimized to
|
|
|
|
|
perform under this minimum memory limit. However, keep in mind many devices are configured with
|
|
|
|
|
higher limits.</li>
|
|
|
|
|
<li>Bitmaps take up a lot of memory, especially for rich images like photographs. For example, the
|
2012-08-14 14:53:42 -04:00
|
|
|
|
camera on the <a href="http://www.android.com/devices/detail/galaxy-nexus">Galaxy Nexus</a> takes
|
|
|
|
|
photos up to 2592x1936 pixels (5 megapixels). If the bitmap configuration used is {@link
|
2012-04-04 17:45:24 -07:00
|
|
|
|
android.graphics.Bitmap.Config ARGB_8888} (the default from the Android 2.3 onward) then loading
|
|
|
|
|
this image into memory takes about 19MB of memory (2592*1936*4 bytes), immediately exhausting the
|
|
|
|
|
per-app limit on some devices.</li>
|
|
|
|
|
<li>Android app UI’s frequently require several bitmaps to be loaded at once. Components such as
|
|
|
|
|
{@link android.widget.ListView}, {@link android.widget.GridView} and {@link
|
|
|
|
|
android.support.v4.view.ViewPager} commonly include multiple bitmaps on-screen at once with many
|
|
|
|
|
more potentially off-screen ready to show at the flick of a finger.</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<h2>Lessons</h2>
|
|
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
|
<dt><b><a href="load-bitmap.html">Loading Large Bitmaps Efficiently</a></b></dt>
|
|
|
|
|
<dd>This lesson walks you through decoding large bitmaps without exceeding the per application
|
|
|
|
|
memory limit.</dd>
|
|
|
|
|
|
|
|
|
|
<dt><b><a href="process-bitmap.html">Processing Bitmaps Off the UI Thread</a></b></dt>
|
|
|
|
|
<dd>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
|
|
|
|
|
using {@link android.os.AsyncTask} and explains how to handle concurrency issues.</dd>
|
|
|
|
|
|
|
|
|
|
<dt><b><a href="cache-bitmap.html">Caching Bitmaps</a></b></dt>
|
|
|
|
|
<dd>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.</dd>
|
|
|
|
|
|
2013-03-04 15:25:40 -08:00
|
|
|
|
<dt><b><a href="manage-memory.html">Managing Bitmap Memory</a></b></dt>
|
|
|
|
|
<dd>This lesson explains how to manage bitmap memory to maximize your app's performance.</dd>
|
|
|
|
|
|
2012-04-04 17:45:24 -07:00
|
|
|
|
<dt><b><a href="display-bitmap.html">Displaying Bitmaps in Your UI</a></b></dt>
|
|
|
|
|
<dd>This lesson brings everything together, showing you how to load multiple bitmaps into
|
|
|
|
|
components like {@link android.support.v4.view.ViewPager} and {@link android.widget.GridView}
|
|
|
|
|
using a background thread and bitmap cache.</dd>
|
|
|
|
|
|
2012-08-14 14:53:42 -04:00
|
|
|
|
</dl>
|