Retrofit và Volley thư viện nào tốt hơn

Đ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ý

So sánh Retrofit và Volley
So sánh Retrofit và Volley

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

Gom Marker trong Android với Google Maps Android API – Google Maps Android Marker Clustering Utility Sử dụng SwipeRefreshLayout trong ứng dụng Android Hướng dẫn tạo Material Dialog Bottom Sheet Android Tạo context menu trong Android – ActionBar ActionMode.CallBack Example Hướng dẫn sử dụng thư viện Volley trong Android Tạo Web Service bằng PHP và MYSQL cho ứng dụng di động – Part 2 Tạo Web Service bằng PHP và MYSQL cho ứng dụng di động – Part 1 Hàm chuyển đổi Timestamp thành Datetime trong Android và JavaScript Design Patterns là gì? Tạo Project Android theo mẫu Design Patterns(Part 2) Design Patterns là gì? Tạo Project Android theo mẫu Design Patterns(Part 1)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.