Tôi muốn chia sẻ kinh nghiệm của mình với 3 thư viện này: UIL, Picasso và Volley. Trước đây tôi đã sử dụng UIL nhưng sau đó tôi đi đến kết luận rằng tôi không thể thực sự đề xuất nó và tôi sẽ đề xuất sử dụng Volley hoặc Picasso để thay thế, cả hai đều được phát triển bởi các nhóm tài năng cao. UIL không tệ chút nào nhưng nó thiếu sự chú ý đến từng chi tiết của hai thư viện còn lại.
Tôi thấy UIL kém đẹp hơn với hiệu suất giao diện người dùng; nó có xu hướng khóa chuỗi giao diện người dùng hơn Volley hoặc Picasso. Điều này có thể một phần là do UIL không hỗ trợ phân phối các phản hồi hình ảnh trong khi Picasso và Volley làm điều đó theo mặc định.
Ngoài ra, tôi không thích hệ thống bộ đệm đĩa của UIL. Trong khi bạn có thể chọn giữa các cách triển khai khác nhau, tôi cần chỉ ra rằng hiện tại không có cách nào để giới hạn bộ nhớ cache của đĩa UIL cả theo tổng kích thước và thời gian hết hạn của thực thể. Volley và Picasso làm điều đó và họ sử dụng thời gian hết hạn do máy chủ trả về theo mặc định trong khi UIL bỏ qua nó.
Cuối cùng, UIL cho phép bạn thiết lập cấu hình bộ tải hình ảnh chung bao gồm cài đặt và triển khai bộ đệm ẩn đĩa và bộ nhớ đệm đã chọn và các chi tiết khác, nhưng cấu hình này sẽ được áp dụng ở mọi nơi trong ứng dụng của bạn. Vì vậy, nếu bạn cần sự linh hoạt hơn như hai bộ đệm đĩa riêng biệt, thì không nên dùng UIL. Mặt khác, Volley cho phép bạn có nhiều bộ tải hình ảnh riêng biệt tùy thích, mỗi bộ có cấu hình riêng. Picasso sử dụng một phiên bản chung theo mặc định nhưng cũng cho phép bạn tạo các phiên bản có thể định cấu hình riêng biệt.
Tóm lại: Picasso có API tốt nhất nhưng nó sử dụng bộ đệm ẩn đĩa HTTP toàn cầu được chia sẻ giữa tất cả các HttpURLConnection
trường hợp, điều này có thể quá hạn chế trong một số trường hợp. Volley có hiệu suất và tính mô-đun tốt nhất nhưng ít thân thiện với người dùng hơn và sẽ yêu cầu bạn viết một hoặc hai mô-đun của riêng bạn để làm cho nó hoạt động như bạn muốn. Nhìn chung, tôi muốn giới thiệu cả hai chống lại UIL.
Chỉnh sửa (18 tháng 12 năm 2014): Mọi thứ đã thay đổi kể từ khi tôi viết câu trả lời đầu tiên này và tôi cảm thấy cần phải cải thiện nó:
Picasso 2.4 thậm chí còn có thể định cấu hình tốt hơn so với các phiên bản cũ và khi được sử dụng với OkHttp (rất được khuyến khích), nó cũng có thể sử dụng bộ đệm đĩa riêng biệt cho từng phiên bản nên thực sự không có hạn chế về những gì bạn có thể làm. Quan trọng hơn, tôi nhận thấy rằng hiệu suất của Picasso và OkHttp đã được cải thiện rất nhiều và theo ý kiến của tôi, nó hiện là giải pháp tải hình ảnh nhanh nhất cho Android. Xin lưu ý rằng trong mã của tôi, tôi luôn sử dụng .fit()
kết hợp với .centerCrop()
hoặc .centerInside()
để giảm mức sử dụng bộ nhớ và tránh thay đổi kích thước bitmap trên chuỗi giao diện người dùng. Picasso được phát triển và hỗ trợ tích cực và đó chắc chắn là một điểm cộng lớn.
Volley không thay đổi nhiều nhưng tôi nhận thấy hai vấn đề với nó trong thời gian chờ đợi:
- Đôi khi dưới tải nặng, một số hình ảnh không được tải nữa do một số lỗi bộ nhớ đệm ổ đĩa.
- Hình thu nhỏ hiển thị trong NetworkImageView (với loại tỷ lệ được đặt thành centerCrop) khá mờ so với những gì bạn nhận được với các thư viện khác.
Vì những lý do này, tôi quyết định ngừng sử dụng Volley.
UIL vẫn còn chậm (đặc biệt là bộ nhớ cache trên đĩa) và API của nó có xu hướng thay đổi khá thường xuyên.
Tôi cũng đã thử nghiệm thư viện mới này có tên là Glide 3 , được tuyên bố là tối ưu hóa hơn Picasso với API giống Picasso. Theo kinh nghiệm cá nhân của tôi, nó thực sự chậm hơn Picasso và Volley khi yêu cầu mạng dưới tải nặng, ngay cả khi được sử dụng kết hợp với OkHttp. Tệ hơn nữa, nó gây ra một số lỗi với các ứng dụng của tôi trong Lollipop khi rời khỏi một hoạt động. Nó vẫn có 2 lợi thế so với các đối thủ cạnh tranh:
- Nó hỗ trợ giải mã GIF động
- Nó đặt các bitmap được giảm tỷ lệ cuối cùng vào bộ nhớ cache của đĩa, có nghĩa là việc đọc lại từ bộ nhớ cache của đĩa là cực kỳ nhanh.
Kết luận: Bây giờ tôi khuyên bạn nên sử dụng Picasso + OkHttp vì nó cung cấp kết hợp tính linh hoạt, API, hiệu suất và độ ổn định tốt nhất. Nếu bạn cần hỗ trợ GIF, bạn cũng có thể xem xét Glide.