Volley框架讓你告別繁瑣的多執行緒
阿新 • • 發佈:2019-02-01
有些天沒有寫東西了,今晚來一發,以前我寫Android的網路部分基本上都是用多執行緒。然而前段時間無意中發現其實谷歌早在2013年就推出過Volley框架。
![谷歌官方圖片](https://img-blog.csdn.net/20151012224158106)
通過圖片我們大概可以瞭解Volley框架主要是為了解決網路併發,以及對網路請求做了一些優化。其實原理還是在基於多執行緒,只是谷歌將它好好的封裝了,給我們開發者省去了不少麻煩。而且載入網路圖片還給增加了快取。接下來不羅嗦,直接上程式碼,這是一個載入本地伺服器圖片的Demo
(ps:註釋的部分是另一種處理方法)
public class MainActivity extends Activity {
private ImageView imageview;
private NetworkImageView mNetworkImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//mNetworkImageView = (NetworkImageView) findViewById(R.id.networkImageView);
//loadImageviewByVolley();
//showImageByNetworkImageView();
}
private void loadImageviewByVolley() {
String url = "http://192.168.191.1:8080/Demo/01.jpg";
imageview = (ImageView) findViewById(R.id.image_img);
/*
* RequestQueue requestQueue=Volley.newRequestQueue(this); final
* LruCache<String,Bitmap> lruCache=new LruCache<String, Bitmap>(20);
* ImageCache imageCache=new ImageCache() {
*
* @Override public void putBitmap(String url, Bitmap bitmap) { // TODO
* Auto-generated method stub lruCache.put(url, bitmap); }
*
* @Override public Bitmap getBitmap(String url) {
*
* return lruCache.get(url); } }; ImageLoader imageLoader=new
* ImageLoader(requestQueue, imageCache); ImageListener
* listener=ImageLoader.getImageListener(imageview,
* R.drawable.ic_launcher, R.drawable.ic_launcher); imageLoader.get(url,
* listener);
*/
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
ImageListener listener = ImageLoader.getImageListener(imageview,R.drawable.default_image, R.drawable.default_image);
imageLoader.get("http://192.168.191.1:8080/Demo/01.jpg", listener);
}
private void showImageByNetworkImageView() {
String imageUrl = "http://192.168.191.1:8080/Demo/01.jpg";
RequestQueue requestQueue = Volley.newRequestQueue(this);
final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(
20);
ImageCache imageCache = new ImageCache() {
@Override
public void putBitmap(String key, Bitmap value) {
lruCache.put(key, value);
}
@Override
public Bitmap getBitmap(String key) {
return lruCache.get(key);
}
};
ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);
mNetworkImageView.setTag("url");
mNetworkImageView.setImageUrl(imageUrl, imageLoader);
}
public void displayImg(View view){
ImageView imageView = (ImageView)this.findViewById(R.id.image_img);
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
// ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() {
// @Override
// public void putBitmap(String url, Bitmap bitmap) {
// }
//
// @Override
// public Bitmap getBitmap(String url) {
// return null;
// }
// });
ImageListener listener = ImageLoader.getImageListener(imageView,R.drawable.default_image, R.drawable.default_image);
imageLoader.get("http://192.168.191.1:8080/Demo/01.jpg", listener);
//指定圖片允許的最大寬度和高度
//imageLoader.get("http://developer.android.com/images/home/aw_dac.png",listener, 200, 200);
}
}
這是處理快取類
public class BitmapCache implements ImageCache {
private LruCache<String, Bitmap> cache;
public BitmapCache() {
cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
}