2013-10-16 15 views
5

Tôi mới làm việc trên Volley và trên bộ nhớ đệm quá: P. Mặc dù tôi đã trải qua một số bài viết & bài đăng liên quan đến Lưu vào bộ nhớ hình ảnh với Volley nhưng tôi vẫn chưa rõ ràng với cách tốt nhất/ưu tiên cho Bộ nhớ đệm hình ảnh với Volley. Giống như bộ nhớ đệm đĩa hoặc bộ nhớ? Volley đã cung cấp hỗ trợ gì và làm thế nào (liên quan đến hỗ trợ bộ nhớ đệm L1 và L2)? Tôi đang sử dụng NetworkImageView trong trường hợp của mình, để điền một chế độ xem danh sách có hình ảnh được tìm nạp từ mạng. Cảm ơn bạn trước!Volley: Image Caching

+0

Tôi cũng nhầm lẫn về điều này: http://stackoverflow.com/a/16897129/2885233 nơi người ta nói rằng 'Volley ngầm xử lý bộ đệm dựa trên đĩa trong bộ nhớ cache L2 của chính nó. Bộ nhớ cache hình ảnh chỉ là bộ nhớ cache L1 ' – arorak

Trả lời

14

Để lưu vào bộ nhớ cache hình ảnh, bóng chuyền hy vọng bạn sẽ cung cấp một bộ nhớ cache bộ nhớ cho hình ảnh. Bộ nhớ cache này được sử dụng trong thời gian lên của ứng dụng cho thời gian tải nhanh hơn bằng bộ nhớ.

Không cụ thể liên quan đến hình ảnh, Volley có riêng bộ nhớ cache đĩa của nó mà nó sử dụng bộ nhớ cache MỌI phản ứng nó được, với chiến lược mặc định của bộ nhớ đệm theo tiêu đề bộ nhớ cache của HTTP response.

Nếu hình ảnh bạn đang tải trong ứng dụng của bạn có tiêu đề bộ nhớ cache, chúng sẽ được lưu trong bộ nhớ cache theo chúng trên đĩa, nếu không thì sẽ không được.

Nếu bạn không hài lòng với chiến lược này và muốn buộc đĩa lưu vào bộ nhớ cache, bạn sẽ phải chỉnh sửa/thêm một mã nhỏ thay đổi chiến lược lưu trong bộ nhớ cache. Có nhiều cách để đạt được điều này, một cách đang cung cấp việc triển khai của riêng bạn để phân tích cú pháp tiêu đề HTTP. Hãy xem HttpHeaderParser trong nguồn Volley.

+0

Cảm ơn Itai! Giống như bạn nói tôi không chắc chắn rằng những hình ảnh mà tôi hoặc bất kỳ người dùng (những người sẽ sử dụng này) sẽ có tiêu đề bộ nhớ cache hay không. Vì vậy, tôi đang cố gắng để làm lực ** Disk caching ** chỉ và cho rằng tôi gọi: https://github.com/JakeWharton/DiskLruCache nhưng tôi không sử dụng cho dù đây là một cách tốt hay cách tiếp cận nào khác có thể tốt hơn . Ngoài ra tôi không rõ ràng liệu tôi có thể sử dụng [DiskBasedCache] (http://files.evancharlton.com/volley-docs/) của cú volley ở đây không? – arorak

+1

Hãy cẩn thận: bạn * không * muốn sử dụng bộ nhớ cache trên đĩa có bộ nhớ cache được mong đợi trong hàm tạo 'ImageLoader'. Nếu bạn muốn ép buộc bạn phải thực hiện chính xác việc đó - hãy chỉnh sửa mã nguồn Volley để phân tích cú pháp tiêu đề HTTP giống như nó có tiêu đề bộ nhớ cache hoặc thay đổi kiểm tra các mục trong bộ nhớ cache. Ngoài ra, nếu câu trả lời của tôi đã giúp, tôi sẽ đánh giá cao nếu bạn chấp nhận nó, cảm ơn. –

+0

Ok. Thực ra tôi không biết rằng bộ nhớ cache được mong đợi trong ImageLoader. Tôi bị mất trên tham chiếu mà nói rằng bộ nhớ cache thông qua nên được 'Bộ nhớ cache để sử dụng như một bộ nhớ cache L1'. Và L1 rõ ràng sẽ là một bộ nhớ (đúng với tôi nếu tôi sai ;-)). – arorak