Đa số các ứng dụng Mobile đều sử dụng kết nối mạng để thực hiện một hay nhiều request đến server, để đơn giản trong việc thực hiện các yêu cầu request này lập trình viên thường sử dụng các thư viện có sẵn để tiện sử dụng nhất. Hai trong số các thư viện nổi tiếng đó có thể kể đến là Volley và Retrofit, qua bài viết này chúng ta hãy thử nhìn xem cái nào tốt hơn nhé.
Xem thêm:
So sánh Retrofit và Volley
Retrofit
Retrofit là một thư viện được phát triển bởi Square, một trong những hãng phần mềm nổi tiếng thế giới, trong quá trình họ phát triển phần mềm POS Square họ đã viết ra rất nhiều thư viện để phục vụ cho ứng dụng của mình. Bạn có thể tham khảo trên trang chủ của Square những thư viện đó, tất cả đều là open source.
Retrofit là một REST Client(1) cho Android và JAVA. Nó được phát triển giúp cho quá trình kết nối client – server trở nên dễ dàng, nhanh chóng.Với Retrofit bạn có thể GET,POST,PUT,DELETE …
Volley
Volley là một Networking Library được Google phát triển và công bố tại Google I/O 2013 để quản lý các request network và lưu trữ các kết quả trả về – response, nó giúp các nhà phát triển – developers không phải viết nhiều code như trước nữa.Các tính năng – features trong Volley cho phép cùng một lúc thực hiện nhiều request trên các tiến trình – threads khác nhau với các mức độ ưu tiên – priority. Tất cả các request được thực hiện và lưu trữ trong bộ nhớ cache – cache memories giúp cho việc reload lại dữ liệu nhanh hơn.Toàn bộ response được lưu trong memories vậy nên nó không tốt khi dùng để load các dữ liệu lớn như âm nhạc – music hoặc phim – movies.Nhưng nó thực sự tuyệt vời để load các dữ liệu dạng JSON, Image hay String.
Tốc độ xử lý
Trong cả ba bài kiểm tra với lặp lại khác nhau (1 – 25 lần), Volley nhanh hơn từ 50% đến 75% so với AsyncTasks . Retrofit đạt tốc độ nhanh hơn đáng kể từ 50% đến 90% so với AsyncTasks, so với cùng điểm cuối cùng với cùng số lần. Trên bộ kiểm tra Dashboard , cái này thông dịch sang loading/parsing dữ liệu nhanh hơn vài giây. Đó là một sự khác biệt thật lớn trên thực tế. Để làm cho bài kiểm tra công bằng, thời gian cho AsyncTasks/Volley đã included việc phân tích cú pháp JSON còn Retrofit đã tự động làm điều đó cho bạn.
Kết luận: Retrofit có tốc độ vượt trội hơn hẳn
Dữ liệu xử lý
Retrofit xử lý các API thông qua call back của java. Vì vậy những gì bạn cần làm là chỉ rõ URL và tham số request/response. Retrofit còn hỗ trợ bạn phân tích chuỗi json bằng Gson.
Ví dụ về retrofit:
// Retrofit turns your HTTP API into a Java interface public interface GitHubService { @GET("users/{user}/repos") Call> listRepos(@Path("user") String user); } // the Retrofit class generates an implementation of the above interface Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .build(); GitHubService service = retrofit.create(GitHubService.class); // each Call from the created GitHubService can make a synchronous or // asynchronous HTTP request to the remote webserver Call> repos = service.listRepos("octocat"); // let's use the Call asynchronously call.enqueue(new Callback>() { @Override void onResponse(Response> contributors) { // ... } @Override void onFailure(Throwable t) { // ... } });
Volley chỉ hỗ trợ các phương thức trả về String, Image, JsonObject, JsonArray và không có built-in hỗ trợ XML.
Ví dụ Volley:
// instantiate the RequestQueue RequestQueue queue = Volley.newRequestQueue(this); String url ="http://www.google.com"; // request a string response asynchronously from the provided URL StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener() { @Override public void onResponse(String response) { // ... } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // ... } }); // add the request to the RequestQueue queue.add(stringRequest);
Kết luận, cả hai thư viện đều xử lý tốt các request, đơn giản và dễ bảo trì code.
Xử lý hình ảnh
- Retrofit không hỗ trợ tải hình ảnh, nó được khuyến cáo nên sử dụng thư viện Glide hoặc picasso để làm điều này.
- Volley có hỗ trợ tải hình ảnh, nhưng chỉ là mức thô và chưa được tối ưu hóa trong việc load ảnh. Bạn có thể sử dụng Glide hoặc picasso để thực hiện việc này.
Cả picasso và Glide đều hỗ trợ tốt trong việc xử lí hình ảnh. Tuy nhiên, điểm khác nhau giữa chúng là:
- Glide hỗ trợ ảnh GIF và lưu video cục bộ, picasso thì không
- Glide lưu ảnh sau khi đã thay đổi kich thước, điều đó giúp giảm dung lượng lưu trữ trong cache còn picasso thì lưu hình ảnh đầy đủ.
Hiệu suất và bộ nhớ đệm
Cả hai đều sử dụng thư viện OkHttp và sử dụng thread hỗ trợ nhiều request một lúc.
- Retrofit không hỗ trợ cache
- Volley hỗ trợ cache một cách linh hoạt và phức tạp.
Tải file lên server
- Volley không hỗ trợ multipart uploads, nếu muốn tải file lên server bạn bắt buộc phải custom lại hoặc sử dụng thư viện của bên thứ 3.
- Retrofit hỗ trợ đầy đủ multipart uploads
Tải file xuống máy
Cả hai đều không hỗ trợ tải file, bạn nên sử dụng DoownloadManager để thực hiện việc này