I am using following example to display internet images in my activity.
http://developer.android.com/resources/tutorials/views/hello-gridview.html
In custom image adapter I’m directly loading images from internet and assigning it to imageview.
Which shows images in gridview and every thing works fine but it is not efficient way.
When ever i scroll gridview it again and again loads images and thats why gridview scrolls very slow
Is there caching or some useful technique available to make it faster?
Create a global and static method which returns a Bitmap. This method will take parameters:
context,imageUrl, andimageName.in the method:
check if the file already exists in the cache. if it does, return the bitmap
otherwise you must load the image from the web, and save it to the cache:
preload a
Vector<SoftReference<Bitmap>>object with all of the bitmaps using the method above in anAsyncTaskclass, and also anotherListholding aMapof imageUrls and imageNames(for later access when you need to reload an image), then set yourGridViewadapter.i recommend using an array of
SoftReferencesto reduce the amount of memory used. if you have a huge array of bitmaps you’re likely to run into memory problems.so in your
getViewmethod, you may have something like(whereiconsis aVectorholding typeSoftReference<Bitmap>:you would need to do a check:
in the
ReloadImageTaskAsyncTaskclass, simply call the global method created from above with the correct params, thennotifyDataSetChangedinonPostExecutesome additional work may need to be done to ensure you don’t start this AsyncTask when it is already running for a particular item