Volley完全解析

2021-07-03 21:41:16 字數 3918 閱讀 2296

volley是goole在2023年google i/o大會上推出了乙個新的網路通訊框架,它是開源的。從名字由來和配圖中無數急促的火箭可以看出 volley 的特點:特別適合資料量小,通訊頻繁的網路操作。(個人認為 android 應用中絕大多數的網路操作都屬於這種型別)。

volley載入實現了兩級快取(網路快取、檔案快取),沒有實現記憶體的快取。volley已經把各種非同步任務、取樣都封裝好了。記憶體快取使用lrucache類實現,需要我們手動新增進去。沒有使用軟引用快取。因為4.0之後的android系統已經不推薦使用軟引用快取了。

其實volley可以完全取代我們手寫的**快取,因為google已經對volley進行了非常好的封裝,具體說明如下:

單例:

package com.ht.xiangqu.util;

import android.content.context;

import android.graphics.bitmap;

import android.support.v4.util.lrucache;

import com.android.volley.requestqueue;

import com.android.volley.toolbox.imageloader;

import com.android.volley.toolbox.volley;

/** * created by annuo on 2015/6/16.

*/public class requestmanager else

}return ourinstance;

}public static requestmanager getinstance()

private requestmanager(context context)

@override

public void putbitmap(string url, bitmap bitmap) });

}public requestqueue getrequestqueue()

public imageloader getimageloader()

}

package com.ht.xiangqu.util;

import android.util.log;

/** * created by annuo on 2015/6/16.

*/@overridepublicvoidoncreate()

}

只有載入的時候才會有記憶體快取,對於字串一般都是之後檔案快取。

google並沒有自動的幫我們實現記憶體的快取,需要我們自己手動加入進去。記憶體快取在單例類中已經體現了(即lrucache),以後我們每次使用的時候都不必再加入記憶體快取。lrucache這個類是android3.1版本中提供的,如果你是在更早的android版本中開發,則需要匯入android-support-v4的jar包。

volley已經預設幫我們實現了檔案的快取。我們通過源**看一下:

/**

* constructs a new imageloader.

* @param queue the requestqueue to use for ****** image requests.

* @param imagecache the cache to use as an l1 cache.

*/public imageloader(requestqueue queue, imagecache imagecache)

以上**是imageloader中的一段**,從中我們可以看到在構造imageloader時,我們已經預設的建立了乙個l1級的快取(檔案快取)。

那volley快取下來的檔案到底在哪呢?見下圖:

具體的位置就在如圖所示的位置。即data/data/應用程式的包名/volley,如果沒有修改volley的快取位置,預設名字叫volley。

其實volley預設的已經幫我們做了的二次取樣,只是需要我們在進行請求的時候,多加入兩個引數。我們一般都忽略了這個問題,最後導致的是不斷的oom。

/**

* 這是訪問網路的核心方法

* @param requesturl

* @param imagelistener

* @param maxwidth

* @param maxheight

* @return

*/public imagecontainer get(string requesturl, imagelistener imagelistener,

int maxwidth, int maxheight)

}, maxwidth, maxheight,

config.rgb_565, new errorlistener()

});mrequestqueue.add(newrequest);

minflightrequests.put(cachekey,

new batchedimagerequest(newrequest, imagecontainer));

return imagecontainer;

}

以上**是imageloader的核心方法,其中有兩個引數是maxwidth,maxheight,我們一般都忽略了這兩個引數。預設值是0和0,這樣二次取樣演算法就不起作用了,我們得到的是從伺服器1:1哪來的。但是一般我們設定了這兩個引數,就可以得到我們希望的縮小比例的。這樣就可以完全的避免oom。

public static imagelistener getimagelistener(final imageview view,

final int defaultimageresid, final int errorimageresid)

}@override

public void onresponse(imagecontainer response, boolean isimmediate) else if (defaultimageresid != 0) }};

}

/**

* 使用此方法能夠解決錯亂問題

* @param view

* @param defaultimageresid

* @param errorimageresid

* @param url

* @return

*/public static imagelistener getimagelistener(

final imageview view,

final int defaultimageresid,

final int errorimageresid,

final string url)

}@override

public void onresponse(imagecontainer response, boolean isimmediate)

} else if (defaultimageresid != 0) }};

}

關於這塊內容,網路上有很多的資料,總之volley使用起來非常的簡單,感興趣的可以去網路上查詢相關的資料進行學習。volley的載入速度絕對出乎你的意料。

——知道自己是誰,要什麼,能跳多高,而且敢跳,並承受跳了可能失敗的所有結果。

volley完全解析

volley是goole在2013年google i o大會上推出了乙個新的網路通訊框架,它是開源的。從名字由來和配圖中無數急促的火箭可以看出 volley 的特點 特別適合資料量小,通訊頻繁的網路操作。個人認為 android 應用中絕大多數的網路操作都屬於這種型別 volley載入實現了兩級快取...

Volley網路框架完全解析(實戰篇)

好了,今天就通過乙個瀑布流demo,來使用volley框架請求網路。前言 我們使用networkimageview顯示 1 因為該控制項可以自動的管理好請求的生命週期,當與父控制項detach或者它移出螢幕時可以自動取消網路請求 2 該控制項會根據我們所設定的networkimageview寬高來進...

volley全然解析

volley是goole在2013年google i o大會上推出了乙個新的網路通訊框架,它是開源的。從名字由來和配圖中無數急促的火箭能夠看出 volley 的特點 特別適合資料量小。通訊頻繁的網路操作。個人覺得 android 應用中絕大多數的網路操作都屬於這樣的型別 volley載入實現了兩級快...