日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

接上,进一步优化,LruCache缓存

發(fā)布時(shí)間:2025/4/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 接上,进一步优化,LruCache缓存 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為了節(jié)省流量,提高應(yīng)用的流暢性,采用Lru算法

Lru(Least Recently Used)近期最少使用算法

Android提供了LruCache類來(lái)實(shí)現(xiàn)這個(gè)緩存算法,典型的以內(nèi)存換效率的辦法

最終優(yōu)化完的完整的ImageLoader類的代碼為:

public class ImageLoader{private ImageView mImageView;private Handler mHandler = new Handler();private String mUrl;private LruCache<String, Bitmap> mCaches;//創(chuàng)建Cachepublic ImageLoader(){int maxMemory = (int)Runtime.getRuntime().maxMemory();//獲取最大的可用內(nèi)存int cacheSize = maxMemory/4;mCaches = new LruCache<>(cacheSize){protected int sizeOf(String key, Bitmap value){return value.getByteCount();//在每次存入緩存的時(shí)候調(diào)用}};}public void addBitmapToCache(String url, Bitmap bitmap){//增加到緩存if(getBitmapFromCache(url) == null){mCaches.put(url, bitmap);}}public Bitmap getBitmapFromCache(String url){//從緩存中獲取數(shù)據(jù)return mCaches.get(url);}private Handler handler = new Handler(){public void handleMessage(Message msg){super.handleMessage(msg);if(mImageView.getTag().equals(mUrl))mImageView.setImageBitmap((Bitmap)msg.obj);}}public void showImageByThread(ImageView imageView, String url){mImageView = imageView;mUrl = url;new Thread(){public void run(){super.run();Bitmap bitmao = getBitmapFromURL(url);Message message = Message.obtain();message.obj = bitmap;mHandler.sendMessage(message);}}.start();}public Bitmap getBitmapFromURL(String urlStirng){Bitmap bitmap;InputStream is;try{URL url = new URL(urlStirng);HttpURLConnection connection = (HttpURLConnection)url.openConnection();is = new BufferedInputStream(connection.getInputStream());bitmap = BitmapFactory.decodeStream(is);connection.disconnect();return bitmap;}catch(java.io.IOException e){e.printStackTrace();}finally{is.close();}return null;} }public void showImageByAsyncTask(ImageView imageView, String url){//從緩存中取出對(duì)應(yīng)的圖片,若緩存中沒有,則去網(wǎng)絡(luò)下載Bitmap bitmap = getBitmapFromCache(url);if(bitmap == null){new MyAsyncTask(imageView, url).execute(url);}else{//緩存中有圖片,則直接使用imageView.setImageBitmap(bitmap);}}private class MyAsyncTask extends AsyncTask<String, Void, Bitmap>{private ImageView imageView;private String mUrl;public MyAsyncTask(ImageView imageView, String url){mImageView = imageView;mUrl = url;}protected Bitmap doInBackground(String... params){String url = params[0];//從網(wǎng)絡(luò)獲取圖片Bitmap bitmap = getBitmapFromURL(url);if(bitmap != null){//將不在緩存的圖片加入緩存addBitmapToCache(url,bitmap)}return bitmap;}protected void onPostExecute(Bitmap bitmap){super.onPostExecute(bitmap);if(mImageView.getTag().equals(mUrl))mImageView.setImageBitmap(bitmap);} }另外,還需要在MyAdapter類中再初始化一個(gè)對(duì)象:

public class MyAdapter extends BaseAdapter{private List<MyBean> mList;private LayoutInflater mInflater;private ImageLoader mImageLoader;public MyAdapter(Context context, List<MyBean> data){mList = data;mInflater = LayoutInflater.from(context);mImageLoader = new ImageLoader();}這樣就保證了只有一個(gè)LruCache


《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的接上,进一步优化,LruCache缓存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。