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.
*/public
class
extends
@override
public
void
oncreate()
}
只有載入的時候才會有記憶體快取,對於字串一般都是之後檔案快取。
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載入實現了兩級快...