Tôi đã hơi bối rối về sự khác biệt giữa Handlers
, AsyncTask
và Threads
trong Android. Tôi đã đọc khá nhiều blog và câu hỏi ở đây trong StackOverflow.
Handler
là các chủ đề nền cung cấp cho bạn để giao tiếp với giao diện người dùng. Cập nhật một thanh tiến trình, ví dụ, nên được thực hiện thông qua Handler
. Sử dụng Trình xử lý bạn có lợi thế MessagingQueues
, vì vậy nếu bạn muốn lên lịch tin nhắn hoặc cập nhật nhiều thành phần UI hoặc có các tác vụ lặp lại.
AsyncTask
trên thực tế, chúng tương tự nhau, nhưng chúng sử dụng Handler
, nhưng không chạy trong luồng UI, vì vậy tốt cho việc tìm nạp dữ liệu, ví dụ như tìm nạp các dịch vụ web. Sau này bạn có thể tương tác với UI.
Thread
tuy nhiên không thể tương tác với giao diện người dùng, cung cấp luồng "cơ bản" hơn và bạn bỏ lỡ tất cả các tóm tắt của AsyncTask
.
Tuy nhiên, tôi muốn có một kết nối ổ cắm chạy trong dịch vụ. Điều này nên được chạy trong một xử lý hoặc một chủ đề, hoặc thậm chí một AsyncTask
? Tương tác UI không cần thiết chút nào. Liệu nó có làm nên sự khác biệt về hiệu suất mà tôi sử dụng không?
Trong khi đó, các tài liệu đã được cải thiện lớn.
Handler
không phải là một chủ đề, và nó không thực hiện bất cứ điều gì. Nó chỉ là một phương tiện để chuyển các tin nhắn từ một luồng này sang hàng đợi tin nhắn của một luồng khác một cách an toàn . Vì vậy, thông thường, (ít nhất) hai luồng vẫn phải được tạo, sau đó có thể sử dụng trình xử lý, nhưng trình xử lý không thể tự thực hiện bất cứ điều gì.