Netroid是一個基於Volley 實現的Android Http庫。提供異步執行網絡請求、緩存返回結果、批量圖片加載、大文件斷點下載的常見Http交互功能。致力於避免每一個項目重複開發基礎Http功能,實現顯著地縮短開發週期的願景。git
Netroid自啓動後建立由開發者指定的線程數目,每一個線程由 BlockingQueue 進行阻塞。當有新的請求進入隊列時,其中一個線程將被喚醒並得到請求對象, 而後開始執行,執行完成後線程從新回到阻塞狀態,等待下一次喚醒。Netroid實現了強大的狀態回調接口在請求執行過程當中進行通知, 包括開始、完成、成功、重試、失敗、取消、執行網絡操做、應用緩存、下載進度九種狀態回調,開發者可方便地獲取請求的執行狀況,對用戶進行友好提醒。github
Netroid庫的主入口是RequestQueue
,一般狀況下在Application.onCreate()方法中初始化,做爲全局單例對象存放:緩存
Network network = new BasicNetwork(new HurlStack(Const.USER_AGENT, null), HTTP.UTF_8); // RequestQueue在建立時可指定使用HttpURLConnection仍是HttpClient來執行請求,同時可指定硬盤緩存的目錄位置及上限大小 RequestQueue mQueue = new RequestQueue(network, 4, new DiskCache(new File(ctx.getCacheDir(), Const.HTTP_DISK_CACHE_DIR_NAME), Const.HTTP_DISK_CACHE_SIZE)); mQueue.start();
在須要發起Http請求時,只須要建立一個Request
實例,添加入RequestQueue便可,Netroid會部署並在線程容許的狀況下執行,並經過Listener的各個接口回調執行結果到主線程:網絡
StringRequest request = new StringRequest(url, new Listener<String>() { ProgressDialog mPrgsDialog; @Override public void onPreExecute() { mPrgsDialog = ProgressDialog.show(Activity.this, null, "loading...", true, true); } // cancel the dialog with onFinish() callback @Override public void onFinish() { mPrgsDialog.cancel(); } @Override public void onSuccess(String response) { Toast.makeText(Activity.this, "response is : " + response, 2000).show(); } @Override public void onError(NetroidError error) { Toast.makeText(Activity.this, error.getMessage(), 2000).show(); } @Override public void onCancel() { Toast.makeText(Activity.this, "request was cancel", 2000).show(); } }); // add the request to RequestQueue, will execute quickly if has idle thread mQueue.add(request);
使用Netroid提供的ImageLoader
能夠很是方便地實現圖片加載功能,ImageLoader須要在初始化RequestQueue時建立,由於其做爲Netroid的一個組件,依賴於Netroid的請求調用機制:異步
// ImageLoader在建立時可指定圖片的內存緩存方案 ImageLoader mImageLoader = new SelfImageLoader( mRequestQueue, new BitmapImageCache(Const.HTTP_MEMORY_CACHE_SIZE));
在須要加載圖片的地方,只須要調用ImageLoader的方法便可:ide
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, 0, 0); mImageLoader.get(url, listener, 0, 0);
Netroid提供了繼承自ImageView的NetworkImageView來專門處理ListView、GridView圖片頻繁刷新加載的問題:ui
...Inner Adapter @Override public View getView(int position, View convertView, ViewGroup parent) { NetworkImageView imvCover = (NetworkImageView) convertView.findViewById(R.id.imvCover); imvCover.setImageUrl(book.getImageUrl(), mImageLoader); } ...
Netroid實現的 FileDownloader
對斷點續傳方式的大文件下載提供了支持,其內部維護一個下載隊列,因此在建立時須要指定最大並行任務數, 超出限制的任務將自動進入等待隊列。在設置最大並行任務數後,開發者只須要往隊列中不斷添加任務,其它的事情均由 FileDownloader 完成。this
FileDownloader的使用方法跟ImageLoader相同,在Application中建立一個單例的對象,在須要使用的地方調用接口:google
FileDownloader mFileDownloader = new FileDownloader(mRequestQueue, 1);
FileDownloader將在任務添加成功時返回 DownloadController
實例對象,這個對象提供了查看任務執行狀態、暫停、繼續、取消四項必需的操做功能, 開發者只須要持有這個對象,便可隨時掌控任務的全部狀況。url
public static FileDownloader.DownloadController addFileDownload(String storeFilePath, String url, Listener<Void> listener) { return mFileDownloader.add(storeFilePath, url, listener); }
Netroid開源於Github,提供完善的中文文檔指引,全部更新都會第一時間發佈於項目主頁內,你們在使用過程當中發現問題時或有不明白的地方,能夠反饋到github,交流以促進項目功能的完善。
爲了讓開發者快速瞭解Netroid的全部功能點,能夠下載演示程序先行查看效果。