Netroid:強大、快速、易用、可擴展基於Volley實現的Android Http庫

簡介:

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的全部功能點,能夠下載演示程序先行查看效果。

相關文章
相關標籤/搜索