1. 程式人生 > >volley框架再識

volley框架再識

Volley是一個HTTP庫,它使得在Android應用上訪問網路更簡單,更重要的是,更快。

Volley提供了一下的便利:

       自動的網路請求排程。
      多併發網路連線。
       設定快取,清除快取
      你可以取消單個請求,或者取消一些請求。
     強大的排序功能,使的從網路非同步獲取資料並正確填入UI變得容易。

Volley不適合繁重的下載或者流的操作,因為Volley會把解析到的響應資料保持在記憶體中。


先看一段下載網路圖片的程式碼


public class MainActivity extends Activity {
	  String imageUrl = "http://zxpic.gtimg.com/infonew/0/wechat_pics_-6472427.jpg/640";   
	  ImageView imView;
	  ImageListener imagelistener;
	  ImageLoader imageloaader;
	  RequestQueue mQueue;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);		
		imView=(ImageView) findViewById(R.id.tests);
		//通過Volley的靜態方法new一個請求佇列,再呼叫請求佇列(RequestQueue是由快取和網路執行緒構造的)的start方法。
		mQueue=Volley.newRequestQueue(this);
		
		//第一個引數是存放下載圖片資源的物件imview,第二個是預設的圖片的資源ID,第三張是資源請求錯誤是給的圖片資源ID
		imagelistener=ImageLoader.getImageListener(imView,
					R.drawable.ic_launcher,
					R.drawable.ic_launcher);
		 //第一個引數是The RequestQueue to use for making image requests.
		//第二個引數是設定快取的類
		   imageloaader= new ImageLoader(mQueue, new BitmapCache());
		   //得到圖片並載入
		   imageloaader.get(imageUrl, imagelistener);
		   mQueue.start();
	}


得到一個RequestQueue請求佇列時,就新增一個請求Request,Volley提供有三種請求的封裝,一個是StringRequest,一個事ImageRequest,還有一個是JsonRequest。
最後,呼叫RequestQueue的start方法就可以開始一條網路請求了。
這裡一個最核心的就是RequestQueue請求佇列這個了。
這個請求佇列是有兩個東西完成,一個是cache一個network。
這個RequestQueue的構造形式有四種:除了上面這兩個還有執行緒池數量,響應委派。
1,public RequestQueue(Cache cache, Network network, int threadPoolSize,ResponseDelivery delivery)
2, public RequestQueue(Cache cache, Network network, int threadPoolSize)
3,public RequestQueue(Cache cache, Network network)


其實Cache和Network真正的工作者還是CacheDispatcher快取排程和NetworkDispatcher網路排程。下期再詳細講解Dispatcher。。
RequestQueue的成員方法主要有下面幾個:
 public void start();//請求佇列開始進行排程發vgm
 public void stop();//佇列退出排程
 public Request add(Request request);//新增一個請求,通過呼叫start()來執行
 void finish(Request request);//這個方法應該是釋放請求資源的方法
 public void cancelAll();//取消當前的請求
1.StringRequest是繼承Request<String> ,對應String的ResponseListener交付請求結果。
 
public StringRequest(int method, String url, Listener<String> listener,ErrorListener errorListener)
2.JsonRequest有JsonObjectRequest和JsonArrayRequest兩個子類,通過parseNetworkResponse(NetworkResponse response)來處理JsonObject和JsonArray兩個不同結果。
3.ImageRequest的構造引數比較多,主要針對圖片的一些處理工作。多了一個限制圖片最大長寬和configOptions圖片類的東西。
public ImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight,Config decodeConfig, Response.ErrorListener errorListener)