Volley框架-------自己理解

Volley可是說是把AsyncHttpClient和Universal-Image-Loader的優點集於了一身,既可以像AsyncHttpClient一樣非常簡單地進行HTTP通信,也可以像Universal-Image-Loader一樣輕鬆加載網絡上的圖片。除了簡單易用之外,Volley在性能方面也進行了大幅度的調整,它的設計目標就是非常適合去進行數據量不大,但通信頻繁的網絡操作,而對於大數據量的網絡操作,比如說下載文件等,Volley的表現就會非常糟糕。

********************************************************

volley框架總結,數據量小,適合小數據的傳輸下載,擴展性強,內部是基於大量的接口設計,可配置性強,而且開源,適合配置屬於自己的volley框架,包括請求頭處理,緩存機制的支持,安卓api9以下是用httpclient來實現,9以上使用。volley默認只有磁盤緩存,並且是默認開啓。

1.網絡請求。需要先實例化消息隊列,一般是在application裏實現的,

兩種方式get和post,get請求網絡數據需要三個參數,url,成功的接口回調還有失敗的接口回調,post請求需要聲明一下post的模式(相比get就在三個參數前面多加了這一個參數),並且在匿名內部類裏重寫一個getparams方法,在裏面put相應的參數既可。

StringRequest(Request.Method.POST,url,Listener,ErrorListener){
  public Map<String,String> getParams(){
	return map;
	}
}

然後要給這個request請求,添加到消息隊列中,並且設置tag,用於在程序結束中取消這個請求,

請求數據需要兩個dispatcher分發的方法,一個是CacheDispatcher方法,另一個是NetworkDispatcher,兩個都是線程,不過一個是走緩存一個是走網絡。加載時,會先走緩存。如果未緩存,或者緩存失效以及緩存刷新就會走NetworkDispatcher。最後NetworkDispatcher將數據的結果返回給ResponseDelivery(結果分發接口),

2.圖片加載ImageRequest
                 * 參數一:url地址
                 * 參數二:成功的回調監聽
                 * 參數三四:圖片的最大寬高,這個屬性一般和ScaleType屬性來連用,當設置爲0是表示不縮放
                 * 參數五:縮放類型
                 * 參數六:圖片的解碼類型(ARGB8888,ARGB4444,RGB565,ALPHA8)
                 * 參數七:圖片顯示前的處理(顯示爲圓角的或者圓形圖片)
                 * 參數八:錯誤或者失敗的回調 

ImageRequest imageRequest = new ImageRequest(
				url,
				new Response.Listener<Bitmap>() {
					@Override
					public void onResponse(Bitmap bitmap) {
						imageView.setImageBitmap(bitmap);
					}
				},
				0,0,
				ImageView.ScaleType.CENTER_CROP,
				Bitmap.Config.RGB_565,
				null,
				null
		);
如同get和post請求一樣,把這個imageRequest請求添加到最開始實例化的消息隊列中。

3.ImageLoader         相比ImageRequest更加高效,還可以對圖片緩存


//1.實例化ImageLoader
	ImageLoader imageLoader = new ImageLoader(requestQueue,imageCache);
//2.加載顯示圖片
	ImageListener imageListener = imageLoader.getImageListener(imageView,R.default.icon,R.error.icon);
//可以使用四個參數的方法,自動處理圖片的寬高,能防止內存溢出。
 imageLoader.get(url,imageListener);

4.NetworkImageView

一個圖片的控件com.android.volley.NetworkImageView。

在java代碼中綁定該控件後,可以直接該控件點調用相關的屬性。

NetworkImageView nImageView;

ImageLoader imLoader = new ImageLoader(mQueue, new BitmapLruCache());  
        nImageView.setDefaultImageResId(R.drawable.ic_launcher);  //默認
        nImageView.setErrorImageResId(R.drawable.ic_launcher);  // 錯誤
        nImageView.setImageUrl(url, imLoader); 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章