Thứ tự tìm kiếm hình ảnh trong Picasso là: Bộ nhớ đệm -> Bộ đệm đĩa -> Mạng
Vì vậy, có một số trường hợp chúng ta cần làm mất hiệu lực bộ nhớ cache trong Picasso:
1. xác thực bộ nhớ đệm bộ nhớ:
- Chữ thường: Khi hình ảnh đã được cập nhật trong bộ đệm đĩa hoặc máy chủ từ xa
Giải pháp: Xóa cache của Url, File, Uri nếu tồn tại
mPicasso.with(appContext).invalidate(File);
mPicasso.with(appContext).invalidate(Url);
mPicasso.with(appContext).invalidate(Uri);
.
2. xác thực bộ nhớ cache và bộ nhớ cache ổ đĩa trực tuyến
※ lưu ý: Cập nhật nghĩa trực tuyến trực tiếp lên ImageView
Trường hợp người dùng: Hình ảnh được cập nhật trên máy chủ từ xa
Giải pháp: Hủy bỏ hình ảnh trên bộ nhớ cache và bộ nhớ cache ổ đĩa, sau đó yêu cầu hình ảnh trên máy chủ từ xa
mPicasso.with(appContext)
.load(url)
.memoryPolicy(MemoryPolicy.NO_CACHE )
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(imageView);
-> Hủy bộ nhớ đệm và bộ đệm đĩa
.
3. xác thực bộ nhớ cache và bộ nhớ cache ổ đĩa Ngoại tuyến
※ lưu ý: Cập nhật ngoại tuyến nghĩa là không cập nhật lên ImageView, chỉ tìm nạp nền để sử dụng sau
※ Lưu ý: Sử dụng fetch () là tốt nhưng nó cũng tiêu tốn tài nguyên mạng, vì vậy hãy cân nhắc kỹ, kiểm tra kịch bản 4 bên dưới để có giải pháp tốt hơn
4. xác thực bộ nhớ đệm và bộ nhớ đệm đĩa Ngoại tuyến nếu bộ nhớ đệm đĩa tồn tại
- Trường hợp người dùng: Chỉ vô hiệu hóa bộ đệm nếu đã tồn tại trong bộ đệm đĩa
Giải pháp: Nên kiểm tra đĩa bằng cách sử dụng tham số: NetworkPolicy.OFFLINE cache trước khi tìm nạp
mPicasso.with(appContext)
.load(url)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.networkPolicy(NetworkPolicy.OFFLINE)
.fetch(new Callback() {
@Override
public void onSuccess() {
picasso.load(url).fetch();
}
@Override
public void onError() {
}
});
Picasso là một libs tuyệt vời, tôi hy vọng Squareup sẽ thêm nhiều API tiện lợi hơn để quản lý bộ nhớ cache trong tương lai sắp tới.
Picasso.with(getActivity()).invalidate(file);
làm thế nào tôi có thể lưu vào bộ nhớ cache lại?