Lý do
Để biết lý do vì sao dùng HandlerThread, ta đi so sánh Thread với HandlerThread.
* Thread: Khi sử dụng Thread, ta chỉ có thể tạo một instance Thread va chạy nó, nếu muốn chạy nhiều tác vụ, sẽ phải tạo nhiều instance Thread và quá nhiều Thread cùng chạy thì có khả năng ứng dụng sẽ load chậm, vì cpu bị quá tải số luồng có thể xử lý.* HandlerThread: Khắc phục nhược điểm của Thread, có thể tái sử dụng Thread để tránh gây quá tải Thread.
Cách hoạt động
Ta sẽ có một hàng đợi các Task, một Looper, một Thread. Looper sẽ giữ cho Thread sống và nó sẽ chạy lần lượt qua các Task trong hàng đợi, Task nào được chạy đến thì thực thi Task đó trong Thread và xóa Task đó khỏi hàng đợi, hết Task này thì đến Task khác.
Chú ý:* Task mà nói ở trên là nhiệm vụ cần thực hiện, nói dễ hơn là đoạn code cần chạy.* Cần giải phóng Thread vào lúc thích hợp, chẳng hạn như đóng ứng dụng hoặc không thì Thread sẽ chạy mãi mãi.
Tạo HandlerThread
Trong quá trình học, mình thấy có nhiều cách để tạo và sử dụng HandlerThread, nhưng có một cách mình rất thích vì nó đơn giản và ngắn ngọn, chính là cách này:
Khi Looper gặpTask` đó nó sẽ được thực thi.
1 | val handlerThread = HandlerThread("handlerThread") |
* HandlerThread() là một class base từ Thread(), nhưng nó có phương thức looper, chứa hàng đợi Task .* Handler là một class có nhiệm vụ gửi các Task tới hàng đợi Task của Thread từ Thread khác (UI Thread chẳng hạn)
Post một Task tới hàng đợi
Để post một Task tới hàng đợi, chỉ việc:
1 | handler.post{ |
Giải phóng Thread
Để giải phóng Thread, chỉ việc:
1 | handler.removeCallbacks(handlerThread) |
Viết App
Một app đơn giản sử dụng HandlerThread:
1 | class MainActivity : AppCompatActivity() { |

URL QR