Android

Android Networking: Sử dụng Asynctask gọi web API không đồng bộ

Giới thiệu

Chắc hẳn chúng ta ai cũng biết rằng, không thể xử lý các tác vụ mất quá nhiều thời gian trên main UI thread. trong loạt bài về Android Networking này mình sẽ giới thiệu cho các bạn sử dụng AsycTask, Volley hay Retrofit để thực hiện việc gọi đến web API.

AsyncTask trong Android là gì?

AsyncTask là một abstract Android class, giúp ứng dụng Android xử lý main UI thread hiệu quả hơn. AsyncTask trong Android cho phép chúng ta thực hiện những tác vụ dài mà không ảnh hưởng đến main thread. Mình có thể tạm liệt kê một số tác vụ cần thời gian xử lý như:

  • Truy cập tài nguyên (như MP3, JSON, Hình ảnh) từ Internet
  • Thao tác với cơ sở dữ liệu
  • Tương tác với webserice như RESTFUL, SOAP…
  • Các Logic phức tạp mất khá nhiều thời gian như: Nén/giải nén file, sao chép/di chuyển file trong bộ nhớ…

Ở bài viết này, mình sẽ sử dụng AsyncTask để thao tác với web service(API)

Gọi không đồng bộ Web API

Để triển khai AsyncTask ta cần tạo một class kế thừa AsyncTask

Trong AsyncTask<Params, Progress, Result>  có 3 đối số là các Generic Type:

Params: Là giá trị (biến) được truyền vào khi gọi thực thi tiến trình và nó sẽ  được truyền vào doInBackground

Progress: Là  giá trị (biến) dùng để update giao diện diện lúc tiến trình thực thi, biến này sẽ được truyền vào hàm onProgressUpdate.

Result: Là biến dùng để lưu trữ kết quả trả về sau khi tiến trình thực hiện xong.

Ở đây, phương thức doInBackground là bắt buộc phải implementation khi kế thừa AsyncTask. Toàn bộ quá trình thực hiện gọi api sẽ diễn ra trong phương thức này.

Ngoài ra chúng ta có thể kế thừa thêm các phương thức khác như:

  • onPreExecute : xử lý các tác vụ trước khi gọi API
  • onProgressUpdate : xử lý các tác vụ trong khi gọi API
  • onPostExecute : phương thức nhận kết quả trả về từ doInBackground và xử lý các tác vụ sau khi hoàn tất gọi API

Thực thi AsyncTask

Callback dữ liệu về Activity/Fragment

Đầu tiên, chúng ta cần viết thêm 1 class interface và thực thi ở nơi mà chúng ta muốn trả dữ liệu về, ở đây là activity nơi gọi API.

Xử lý data hiển thị lên view trong method onTaskCompleted

Lúc này trong class CallApi ta cần chỉnh sửa như sau:

Một số lưu ý về các sử dụng Async Task

  • Lớp AsyncTask phải được thực hiện trên UI Thread.
  • Hàm execute(Params…) phải được gọi trên UI Thread.
  • Task chỉ được thực thi một lần tại một thời điểm (Exception sẽ được throw nếu thực hiện lần thứ hai).

Như vậy là mình đã hướng dẫn các bạn kiến thức cơ bản về cách sử dụng AsyncTask trong Android để thực thi một tác vụ đến web service. Khi bạn đã nắm được bản chất thì việc sử dụng và ứng biến trong từng trường hợp cụ thể sẽ rất dễ dàng.

Ở phần tiếp theo, mình sẽ hướng dẫn việc thao tác đến web service thông qua thư viện Volley. Ngoài ra các bạn có thể tham khảo source code tại đây

Được gắn thẻ , ,

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *