Thứ Năm, 15 tháng 12, 2016

Viết reflection về AsyncTask, Volley, Retrofit.


1.AsyncTask
AsyncTask là gì?
AsyncTask là một lớp trừu tượng được cung cấp bởi Android, giúp chúng ta sử dụng các thread UI đúng. Lớp này cho phép chúng tôi thực hiện các hoạt động dài / nền và hiển thị kết quả của nó trên thread UI mà không cần phải thao tác đề.
Khi sử dụng AsyncTask?
Android thực hiện mô hình chủ đề duy nhất và bất cứ khi nào một ứng dụng Android được tung ra, một thread được tạo ra. Giả sử chúng ta đang làm mạng lưới hoạt động trên một nút bấm trong ứng dụng của chúng tôi. Mở nút bấm một yêu cầu sẽ được thực hiện cho các máy chủ và phản ứng sẽ được chờ đợi. Do mô hình chủ đề duy nhất của Android, cho đến khi thời gian đáp ứng được chờ đợi màn hình của chúng tôi là không đáp ứng. Vì vậy, chúng ta nên tránh thực hiện các hoạt động dài chạy trên thread UI. Điều này bao gồm tập tin và truy cập mạng.

Để khắc phục điều này chúng ta có thể tạo chủ đề mới và thực hiện các phương pháp chạy để thực hiện cuộc gọi mạng này, do đó, giao diện người dùng vẫn đáp ứng.

Nhưng kể từ khi Android theo mô hình chủ đề duy nhất và Android UI bộ công cụ không phải là thread an toàn, vì vậy nếu có một nhu cầu để thực hiện một số thay đổi về giao diện người dùng dựa trên các kết quả của các hoạt động biểu diễn, sau đó cách tiếp cận này có thể dẫn đến một số vấn đề.

Vì vậy, các khuôn khổ Android đã đưa ra một mô hình rất tốt được bao bọc vào AsyncTask.

Lưu ý: AsyncTask lý tưởng nên được sử dụng cho các hoạt động mà phải mất vài giây. Một số nhiệm vụ giữ cho thread chạy trong thời gian dài như vậy trong trường hợp đó nó được khuyến khích để sử dụng gói java.util.concurrent như Executor, ThreadPoolExecutor và FutureTask.

AsyncTask có bốn bước:
  • doInBackground: Mã thực hiện hoạt động dài chạy đi trong phương pháp này. Khi phương thức onClick được thực thi trên nhấp nút, nó gọi phương thức mà chấp nhận các thông số thực hiện và tự động gọi phương thức doInBackground với các thông số thông qua.
  • onPostExecute: Phương thức này được gọi là phương thức sau doInBackground hoàn thành xử lý. Kết quả từ doInBackground được truyền cho phương thức này.
  • onPreExecute: Phương thức này được gọi là trước khi phương thức doInBackground được gọi.
  • onProgressUpdate: Phương thức này được gọi bằng cách gọi publishProgress bất cứ lúc nào từ doInBackground gọi phương thức này.
  • Các nhiệm vụ có thể được hủy bỏ bằng cách gọi hủy bỏ (boolean) phương thức. Điều này sẽ gây ra các cuộc gọi tiếp theo để isCancelled () để trở về đúng.
  • Sau khi gọi phương pháp này, onCancelled (Object) phương thức được gọi là thay vì onPostExecute () sau khi doInBackground () trả về.
2. 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.
  • Những class request có trong thư viện Volley này bao gồm : jsonObjectRequest, jsonArrayRequest, StringRequest, ImageLoader kết với các constructor đi kèm như : POST, GET, DELETE, PUT, COPY,…
3. Retrofit
Retrofit là một Rest Client (Tìm hiểu thêm về chuẩn RESTFul dưới link tham khảo) cho Android và Java và được tạo ra bởi Square. Họ làm cho việc nhận và tải lên JSON (hoặc dữ liệu khác) một cách khá dễ dàng tới một WebService dựa trên mô hình REST.
Các gói trang bị thêm cho phép sử dụng các bộ chuyển đổi sau đây:
  • Gson: com.squareup.retrofit:converter-gson
  • Jackson: com.squareup.retrofit:converter-jackson
  • Moshi: com.squareup.retrofit:converter-moshi
  • Protobuf: com.squareup.retrofit:converter-protobuf
  • Wire: com.squareup.retrofit:converter-wire
  • Simple XML: com.squareup.retrofit:converter-simplexml



Dưới đây là kết quả so sánh thời gian thực thi giữa Async Task thuần của Android, Volley Library của Google và Retrofit :
tIdZkl3

Không có nhận xét nào:

Đăng nhận xét