スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【Android】SoftReferenceを使って画像をキャッシュする方法

前回画像のURLからBitmapを生成する簡単な方法をまとめましたが、一度ダウンロードした画像を端末にキャッシュして通信を減らすことをしてみます。

画像をよく扱うアプリを作る場合(しかも見られる頻度が高い画像が多い場合)結構効果的です。


import java.lang.ref.SoftReference;
import java.util.HashMap;

import android.graphics.Bitmap;

public class ImageCache {
private static HashMap<String,SoftReference<Bitmap>> cache = new HashMap<String,SoftReference<Bitmap>>();

public static Bitmap getImage(String key) {
if (cache.containsKey(key)) {
SoftReference<Bitmap>ref = cache.get(key);

if (ref != null) {
return ref.get();
}
}

return null;
}

public static void setImage(String key, Bitmap image) {
cache.put(key, new SoftReference<Bitmap>(image));
}

public static boolean hasImage(String key) {
return cache.containsKey(key);
}

public static void clear() {
cache.clear();
}
}


SoftReferenceを使えば適切にガベージコレクトしてくれるし、お手軽にキャッシュが実装できると思います。
今回の場合はURLをキーに画像のBitmapを値にしてHashMapを作ってそこでキャッシュしています。

前回の記事とあわせてキャッシュを実装した画像ダウンロードのメソッドが下のような感じです。


public Bitmap getImage(src){
try{
ImageCache cache = new ImageCache();

Bitmap img = ImageCache.getImage(src);

if(img != null){
return img;
}else{
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setDoInput(true);
connection.connect();

InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);

cache.setImage(src, myBitmap);

return myBitmap;
}
} catch (OutOfMemoryError e) {
//画像が大きすぎたりする場合
e.printStackTrace();
return null;
} catch (Exception e){
e.printStackTrace();
return null;
}
}
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:Android  Trackback:0 comment:0 

Comment

comment form
(編集・削除用):
管理者にだけ表示を許可
プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。