1. 程式人生 > >Volley框架讓你告別繁瑣的多執行緒

Volley框架讓你告別繁瑣的多執行緒

有些天沒有寫東西了,今晚來一發,以前我寫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); } }