2013-08-07 23 views

回答

1

開箱即用Volley只有磁盤緩存(DiskBasedCache類),但你可以提供你的(實現com.android.volley.Cache接口)。 Volley中沒有像「位圖緩存」這樣的術語。所有數據(位圖,文本等)默認緩存在磁盤上。

2

排球,默認情況下,緩存在磁盤上(L2)一切基於HTTP頭。如果沒有緩存或TTL頭可用,則不會發生磁盤緩存。

你問關於緩存其中有一個答案是會幫助你理解here的問題。

關於位圖緩存。實際上,ImageLoader類需要實現接口ImageCache,它應該是一個內存緩存(L1)。見this question

+0

實際上它不是一個真正的同樣的問題。有一級和二級緩存。另外,當你仍然使用磁盤緩存來處理其他類型的數據時,你可以切換出ImageLoader的位圖緩存嗎? – TestBest

+0

我想問題是不一樣的,但答案是足夠全面的回答這個問題。綜上所述,答案是肯定的:內部的L2磁盤緩存和由Volley管理。 **通過您正在使用的'RequestQueue'的每個http響應都將根據其http緩存標頭默認緩存。另一方面,'ImageLoader'期望*你*實現一個內存緩存,並在其構造函數中提供它。 –

0

我知道這是一個老問題,但我有同樣的問題,我花了幾天時間閱讀博客,觀看視頻和滾動起來,在排球源代碼下來,終於弄明白。因此,對於未來這裏引用是最清楚的方式,需要說明:

  • 凌空緩存每個響應,除非明確地迴應說:「無緩存」或「無店」在其頭部。如果是這樣,它將不會被緩存,否則它將根據響應頭的「最大年齡」被緩存。上述
  • 緩存系統有意義100%,因爲響應不會是有效的,如果服務器說,以便使你能夠設置有效期限從服務器側的每個響應(這是真棒)的。
  • ,如果你不喜歡,你可以重寫的凌空源代碼代碼的相應部分上面的緩存方法,但它是非常不推薦
  • 上述所有使用LRU算法,這使得它L2上的磁盤緩存。所以凌空已經內置L2高速緩存爲每個請求(包括圖像)
  • 磁盤高速緩存被阻塞I/O。因此可以說用戶非常快地滑動ListView,並且圖像加載速度非常快,但I/O會阻塞您的主線程,並且您在滾動時看到一些惱人的跳躍。然後,非阻塞(內存中)L1緩存便於使用,並且您可以看到它在處理圖像時非常有用。 OK,那麼在Volley中沒有內置的L1緩存,但是如果你想使用ImageLoader,你可以編寫自己的代碼並將其綁定到ImageLoader。 (不要打擾,成千上萬已經可以下LruBitmapCache名,僅複製)
  • 結論:設置你的服務器發送適當的緩存數據的反應(這是很容易的),並定義一個LruBitmapCache在凌空您ImageLoader的和一切都完成了。您將擁有L1和L2緩存。如果L1失敗排查L2​​(磁盤)並且如果再次失敗則進入RPC。

希望它可以幫助