Thread, Asynctask, Handler in Android


Thread, Asynctask, Handler trong android



Thread

  • Khái niệm
  • Thread là một tiến trình đơn vị xử lý của máy tính có thể thực hiện một công việc riêng biệt.
  • Multi-thread là khái niệm cho nhiều tiến trình chạy đồng thời. Một ứng dụng Java ngoài luồng chính có thể có các luồng khác thực thi đồng thời làm ứng dụng chạy nhanh và hiệu quả hơn.
  • Ưu điểm của đa luồng
  • Mỗi luồng có thể dùng chung và chia sẻ nguồn tài nguyên trong quá trình chạy, nhưng có thể thực hiện một cách độc lập.
  • Ứng dụng trách nhiệm có thể được tách
    + Luồng chính chạy giao diện người dung
    + Các luồng phụ nhiệm gửi đến luồng chính. 
  • Nhược điểm của đa luồng:
  • Càng nhiều luồng thì xử lý càng phức tạp
  • Cần phát hiện tránh các luồng chết, luồng chạy mà không làm gì trong ứng dụng cả

    AsyncTask

  • Khái niệm
  • Một chương trình chạy trên Android có thể sẽ có cấu trúc phức tạp. Yêu cầu kết nối đến Server, CSDL, tải file … Nếu chúng ta xử lý các công việc đó trên Main Thread sẽ làm ứng dụng có vẻ chạy chậm hay treo vì chúng làm gián đoạn việc cập nhật, xử lý trên GUI. Có nhiều cách để giải quyết vấn đề này: sử dụng Service, Thread hay đơn giản hơn là dùng Async Task (Asynchronous Task).
  • Cấu trúc
  • AsyncTask  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àodoInBackground
  • 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.
  • Những đối số nào không sử dụng trong quá trình thực thi tiến trình thì ta thay bằng Void.
  • Thông thường trong 1 AsyncTask sẽ chứa 4 hàm
  • onPreExecute() :Tự động được gọi đầu tiên khi tiến trình được kích hoạt.
  • doInBackground(): Được thực thi trong quá trình tiến trình chạy nền, thông qua hàm này để ta gọi hàm onProgressUpdate để cập nhật giao diện (gọi lệnh publishProgress). Ta không thể cập nhật giao diện trong hàm doInBackground().
  • onProgressUpdate (): Dùng để cập nhật giao diện lúc runtime
  • onPostExecute(): Sau khi tiến trình kết thúc thì hàm này sẽ tự động sảy ra. Ta có thể lấy được kết quả trả về sau khi thực hiện tiến trình kết thúc ở đây.
  • Trong 4 hàm trên thì hàm doInBackground() bắt buộc phải tồn tại, còn các hàm khác có thể khuyết, nhưng theo Tui các bạn nên sử dụng đầy đủ 4 hàm đã nêu.
  • Đối với AsyncTask thì ta cần tạo một lớp kế thừa từ AsyncTask, sau đó từ MainActivity ta gọi hàm execute() của tiến trình này là OK.

    Handler

  • Khái niệm
  • Handler() để giao tiếp giữa 2 hay nhiều thread, ngoài ra Handler() còn được sử dụng để xử lý 1 yêu cầu nào của người dùng sau 1 khoảng thời gian nhất định.




Advertisements