三步搞定android應用圖片緩存

openkk 12年前發布 | 11K 次閱讀 html5未來 小米2

      目前很多商業應用都會涉及到從網絡上讀取圖片數據的問題,為了節約用戶流量,應用一般會將圖片緩存起來。圖片緩存一般分為內存緩存和外存緩存。內存緩存運 用java的緩存機制,在程序完全退出后,緩存所在的內存空間可能被其它應用程序占用從而丟失。外存緩存一般放在程序特有的訪問空間或者sd卡中,在sd 卡中存放的資源為公有資源,其它程序也可以訪問,且對用戶來講沒有一個強制清除緩存的規范機制。綜合以上,本文采用將緩存圖片放置在程序的特有空間中, 其它應用程序無法訪問,且用戶可以在應用程序管理中的"清除數據"選項中清除緩存。 

      本文提供三種緩存策略:(1)LRU算法,固定緩存圖片數量(max_num),當圖片數量超出max_num時,將緩存中最近用的最少的圖片刪除。 (2)FTU算法,固定每張圖片的緩存時限,以最后一次使用算起,超過時限后刪除。(3)FMU算法,在存儲器中固定一定大小的存儲空間,超過固定空間后 將緩存中占用最大尺寸的圖片刪除。使用時只需要向方法體中傳遞圖片的URL即可。

 

使用方法:

    1.導入jar;

    2. 獲取服務;

    3.提交url,交給程序去判斷是否下載。

public class ImagecachetacticsdemoActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.item);

    /*FMU*/
    imageCacheManager = ImageCacheManager.getImageCacheService(this,
            ImageCacheManager.MODE_FIXED_MEMORY_USED, "memory");
    imageCacheManager.setMax_Memory(1024 * 1024);

    /*FTU*/
    // imageCacheManager = ImageCacheManager.getImageCacheService(this,
    // ImageCacheManager.MODE_FIXED_TIMED_USED, "time");
    // imageCacheManager.setDelay_millisecond(3 * 60 * 1000);

               /*LRU*/
    // imageCacheManager = ImageCacheManager.getImageCacheService(this,
    // ImageCacheManager.MODE_LEAST_RECENTLY_USED, "num");
    // imageCacheManager.setMax_num(5);

    // imageCacheManager = ImageCacheManager.getImageCacheService(this,
    // ImageCacheManager.MODE_NO_CACHE_USED, "nocache");

    mImageView = (ImageView) findViewById(R.id.imageView);
    new DownloadTask()
            .execute("http://www.touxiang99.com/uploads/allimg/110417/1_110417112640_2.jpg");
}

private class DownloadTask extends AsyncTask<String, Void, Bitmap> {

    @Override
    protected Bitmap doInBackground(String... params) {
        try {
            return imageCacheManager.downlaodImage(new URL(params[0]));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Bitmap result) {

        mImageView.setImageBitmap(result);
        super.onPostExecute(result);
    }

    @Override
    protected void onPreExecute() {
        mImageView.setImageResource(R.drawable.ic_launcher);
        super.onPreExecute();
    }

}

private ImageView mImageView;
private ImageCacheManager imageCacheManager;

} </pre>

 demo(內有jar包)

轉自:http://www.cnblogs.com/superbearman/archive/2012/01/04/2312112.html

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!