MultiThreading: AsyncTask Multiple parameters – return multiple value

1777

MultiThreading là gì

MultiThreading được sử dụng để xử lý các tác vụ chạy song song với nhau và giúp quá trình tương tác của người dùng với ứng dụng không bị gián đoạn. Khi một ứng dụng được start lên sẽ có một Thread được gọi là Main Thread hay UI Thread được chạy. Từ Thread này chúng ta có thể tạo ra những Thread khác để làm những tác vụ chiếm nhiều thời gian. Nếu chúng ta cố tình xử lý những tác vụ này trên UI Thread mà không tạo ra Thread khác có thể dẫn tới làm đơ UI và crash ứng dụng.

Những trường hợp nên sử dụng MultiThreading.

  •  Thao tác với hệ thống mạng (network).
  •  Đọc, ghi file…

Sử dụng AsyncTask trong Android

Class AsyncTask có các phương thức chính như sau:

onPreExecute

Là phương thức được chạy đầu tiên khi task được bắt đầu. Phương thức này làm việc trên UI Thread.

doInBackground

Là phương thức chạy background thực hiện tác vụ nào đó. Phương thức này chạy trên Background Thread vì thế chúng ta không được update giá trị lên UI trong phương thức này.

onPostExecute

Là phương thức được gọi ngay sau khi phương thức doInBackground kết thúc. Đối số của phương thức này chính là kết quả return từ phương thức doInBackground. Phương thức này làm việc trên UI Thread.

Ba đối số mà khi chúng ta tạo class extends từ AsyncTask là:

Param

Là kiểu của đối số được truyền vào phương thức doInBackground.

Progress

Là kiểu biến dùng để update giá trị trong quá tình doInBackground chạy. Giá trị này được truyền vào phương thức onProgressUpdate.

Result

Là kiểu trả về của phương thức doInBackground và là kiểu của đối số của phương thức onPostExcute.

———————————

Ở Bài viết này mình sẽ  sử dụng AsyncTask với nhiều giá trị truyến vào và trả về kết quả nhiều giá trị:

1.Đầu tiên tạo một class để lưu trữ các giá trị truyền vào như sau:

Asynctask nhận vào 2 giá trị là bm kiểu BitmapRequestCode kiểu Int.

2. Tạo một Class dùng để nhận kết quả trả về như sau:

AsyncTask này sẽ trả về 2 kết quả là 1 Uri và  1 requestCode.

3. Tạo Class AsynTask gọi hàm SaveImage và giá trị trả về là Uri kèm theo một requestCode để xử lý.

4. Thực thi AsyncTask như sau:

Tạo mới đối tượng MyParam  và tiến hành execute AsyncTask.

Note: Hàm Save Image cho bạn nào cần:

Lý thuyết được tham khảo bên eitguide.com .
Code được thực hiện bởi Blog androidcoban.com