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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android使用ImageLoader实现图片缓存(安卓开发必备)

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android使用ImageLoader实现图片缓存(安卓开发必备) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?相信大家在學習以及實際開發中基本都會與網絡數據打交道,而這其中一個非常影響用戶體驗的就是圖片的緩存了,若是沒有弄好圖片緩存,用戶體驗會大大下降,總會出現卡頓情況,而這個問題尤其容易出現在ListView中的Item有圖片的情況中。

前面與大家分享了一個網絡連接框架Retrofit,里面也有類似的圖片加載的picasso,大家都可以去體驗,直通車:http://www.cnblogs.com/liushilin/p/5680135.html

?

當然還有當前我認為最好用的圖片緩存加載框架Fresco,直通車:http://www.cnblogs.com/liushilin/p/5659301.html

大家可能有所不解,為什么有這么好的框架Fresco了,樓主為什么還要分享這個ImageLoader呢?什么鬼。或許大家看法不一樣嘛,總之各有各存在的意義,具體就大家自行甄別咯。

?

項目已同步至:https://github.com/nanchen2251/ImageLoaderDemo

1)先來看看ImageLoader框架的特征。

①多線程下載圖片,圖片可以來源于網絡,文件系統,項目文件夾assets中以及drawable中等

②支持隨意的配置ImageLoader,例如線程池,圖片下載器,內存緩存策略,硬盤緩存策略,圖片顯示選項以及其他的一些配置

③支持圖片的內存緩存,文件系統緩存或者SD卡緩存

④支持圖片下載過程的監聽

⑤根據控件(ImageView)的大小對Bitmap進行裁剪,減少Bitmap占用過多的內存

⑥較好的控制圖片的加載過程,例如暫停圖片加載,重新開始加載圖片,一般使用在ListView,GridView中,滑動過程中暫停加載圖片,停止滑動的時候去加載圖片

⑦提供在較慢的網絡下對圖片進行加載

?

2)然后要使用它,肯定得添加這個支持包,在studio里面支持直接add,搜索Image-loader即可進行網絡添加,需要看它源碼的也可以去github網上gank.

3)先來一個簡單使用,加載一張網絡圖片,只需要兩行代碼,可見其簡單之處。

1 <?xml version="1.0" encoding="utf-8"?>2 <RelativeLayout3 xmlns:android="http://schemas.android.com/apk/res/android"4 xmlns:tools="http://schemas.android.com/tools"5 android:layout_width="match_parent"6 android:layout_height="match_parent"7 tools:context="com.example.nanchen.imageloaderdemo.MainActivity">8 9 <ImageView 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" 12 android:src="@mipmap/ic_launcher" 13 android:id="@+id/main_image" 14 android:layout_centerInParent="true"/> 15 </RelativeLayout>

再看看Activity

package com.example.nanchen.imageloaderdemo;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView;import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; public class MainActivity extends AppCompatActivity { private String imageUrl = "http://pic.cnblogs.com/face/845964/20160301162812.png"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.main_image); ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));//初始化完成 ImageLoader.getInstance().displayImage(imageUrl,imageView); } }

由于是訪問網絡圖片,所以別忘了添加網絡權限

<uses-permission android:name="android.permission.INTERNET"/>

  

運行圖:

?

很簡單有木有,不用你去寫網絡訪問,不用你去異步執行,只要兩句話,只要兩句話!!!

?

4)當然,你還可以盡情的設置它,上面只是用了簡單的Default屬性,實際開發中我們可能需要自己按照自己的需求去寫它,這里就設置了加載失敗顯示的圖片,還有對于緩存機制的管理等。

1 //圖片展示的管理操作2 DisplayImageOptions options = new DisplayImageOptions.Builder()3 .cacheInMemory(true)4 .cacheOnDisk(true)5 .displayer(new RoundedBitmapDisplayer(20))6 .showImageOnFail(R.mipmap.ic_launcher)7 .bitmapConfig(Bitmap.Config.RGB_565) 8 .build(); 9 10 11 //這樣自定義設置后就可以管理二級緩存和三級緩存了 12 ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this) 13 .memoryCacheSizePercentage(20)//設置占用內存的百分比 14 .diskCacheFileCount(100)//設置最大下載圖片數 15 .diskCacheSize(5 * 1024 * 1024) 16 .defaultDisplayImageOptions(options) 17 .build(); 18 19 ImageLoader.getInstance().init(configuration);//初始化完成 20 ImageLoader.getInstance().displayImage(imageUrl,imageView);

?

這里還有很多其他的屬性啦。

當然其中使用ImageLoader加載網絡圖片并不是只有displayImage這個方法的,只是我覺得這是它的方法中相對簡單的一種了。

它其實還有loadImage(),loadImageSync()兩種方式,loadImageSync()方法是同步的,android4.0有個特性,網絡操作不能在主線程,所以loadImageSync()方法我們就不去使用了。對于另外的方式大家可以自行嘗試,不過我的確很推薦上面的方法了。

4)另外ImageLoader自然也是支持加載sd卡圖片和Content provider等,使用起來也比較簡單,只需要簡單添加兩句話即可

1 String imagePath = "/mnt/sdcard/image.png"; 2 String imageUrl = ImageDownloader.Scheme.FILE.wrap(imagePath); 3 4 ImageLoader.getInstance().init(configuration);//初始化完成 5 ImageLoader.getInstance().displayImage(imageUrl,imageView);

5)當然,我相信要使用圖片加載框架,更多的人是用ListView和GridView來顯示大量的圖片,而當我們快速地滑動滾動條的時候,如果同時進行網絡加載的話,我們會發現性能大受迎新,那樣會出現卡頓情況嚴重。所以我們應該在滑動的時候不允許加載圖片,待滑動結束的時候才加載,這個框架自然少不了這個功能,它提供了PauseOnScrollListner.

lv.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling)); gv.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));

其中的三個參數很簡單,第一個是我們的ImageLoader的實例對象,第二個是boolean型參數,需要停止滑動的時候傳入一個true,第三個參數控制很快速的滑動的時候圖片是否加載。

?

說了這么多,也差不多了,安卓很多東西,你只有去嘗試,你才會知道其中的奧妙,趁年少輕狂,好好搞一波瘋狂。

?

轉載于:https://www.cnblogs.com/liushilin/p/5689554.html

總結

以上是生活随笔為你收集整理的android使用ImageLoader实现图片缓存(安卓开发必备)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚欧精品在线观看 | 一区二区三区四区免费 | 精品福利在线观看 | 日韩国产精品一区二区三区 | 青青草原成人 | 九九热视频在线播放 | 国产精自产拍久久久久久蜜 | 日韩欧美自拍偷拍 | 操操干干| 国产精品乱 | 草草影院在线免费观看 | 97人妻精品一区二区免费 | 久久综合88 | 小蝌蚪视频色 | 农村妇女愉情三级 | 成年视频在线观看 | 欧美整片在线观看 | 三上悠亚亚洲一区 | 神马久久午夜 | 国产午夜一级一片免费播放 | 欧美韩国一区 | 欧美1级片 | 特黄特色特刺激免费播放 | 日韩日日日 | 亚洲精品乱码久久久久久日本蜜臀 | 草草视频在线观看 | 日本高清视频网站 | 精品国产乱码久久久久久闺蜜 | 久久永久免费 | 伊人影院网 | 欧美国产在线视频 | 国产a级淫片 | 爱爱网站视频 | 久操精品 | 朋友人妻少妇精品系列 | 91精品国产乱码久久 | 欧美一级鲁丝片 | 无码人妻av免费一区二区三区 | 国产一级做a爱片久久毛片a | 亚洲精品久久久蜜桃网尤妮丝 | 亚洲一区区 | 深夜网站在线 | av综合导航| 天天干天天操天天爽 | 久久国产精品99久久人人澡 | av黄在线 | 欧美日韩精品一二三区 | 亚洲a在线观看 | 午夜xxx | 免费看一级黄色大片 | 久久天天综合 | 中文字幕精品无 | 亚洲色图导航 | 欧美乱视频 | 熟女视频一区 | 美国特色黄a大片 | 国产又猛又黄又爽 | 在线播放黄色av | 奇米第四色在线 | 精品久久久久国产 | 538国产精品视频一区二区 | 精品久久久亚洲 | 97视频国产 | 日本少妇性生活 | 99久久久国产精品免费蜜臀 | 国产91精品一区二区绿帽 | 在线免费黄色片 | 日本a级一区 | 午夜精品在线观看 | 久热青草 | 亚洲色图在线视频 | 国产人妻精品一区二区三区 | 天天操bb | 欧洲综合视频 | 亚洲精品久久久久avwww潮水 | 精品久久久久久亚洲综合网站 | 手机天堂网 | 日本黄色大片在线观看 | 久久精品国产亚洲av香蕉 | 国产精品黄色av | www.brazzers.com| 国产精品综合久久久久久 | 国产精品成人无码专区 | 18禁一区二区 | 国产又大又黑又粗免费视频 | 亚洲国产色图 | 成人国产在线观看 | 秋霞在线一区二区 | 中文字幕久久熟女蜜桃 | 国产伦理自拍 | 亚洲欧美日韩不卡 | 欧美二三区 | 少妇在线观看 | 中文字幕被公侵犯的漂亮人妻 | 91精彩刺激对白 | 国产福利资源 | 欧美特黄aaaaaa | 美女又爽又黄免费视频 | 中国女人内谢69xxxxⅹ视频 |