Nếu bạn thấy mã nguồn của Asyntask và Handler, bạn sẽ thấy mã của chúng hoàn toàn bằng Java. (tất nhiên, có một số ngoại lệ, nhưng đó không phải là một điểm quan trọng).
Tại sao có nghĩa là gì? Nó có nghĩa là không có phép thuật trong Asyntask hoặc Handler. Họ chỉ làm cho công việc của bạn dễ dàng hơn như một nhà phát triển.
Ví dụ: Nếu Programa gọi methodA(), methodA() sẽ chạy trong một thread khác với ProgramA.You có thể dễ dàng kiểm tra bằng cách:
Thread t = Thread.currentThread();
int id = t.getId();
Và tại sao bạn nên sử dụng thread mới? Bạn có thể google cho nó. Nhiều lý do.
Vì vậy, sự khác biệt là gì?
AsyncTask và Handler được viết bằng Java (sử dụng nội bộ một Thread), vì vậy mọi thứ bạn có thể làm với Handler hoặc AsyncTask, bạn cũng có thể đạt được bằng cách sử dụng một Thread.
Trình xử lý và AsyncTask thực sự giúp gì cho bạn?
Lý do rõ ràng nhất là liên lạc giữa chuỗi người gọi và chuỗi công nhân. (Chủ đề người gọi: Một chủ đề gọi là Chủ đề công việc để thực hiện một số nhiệm vụ. Chủ đề người gọi có thể không phải là Chủ đề giao diện người dùng luôn). Và, tất nhiên, bạn có thể giao tiếp giữa hai luồng theo các cách khác, nhưng có nhiều nhược điểm, ví dụ: Chủ đề chính không phải là chủ đề an toàn (trong phần lớn thời gian), nói cách khác, NGUY HIỂM.
Đó là lý do tại sao bạn nên sử dụng Handler và AsyncTask. Họ làm hầu hết các công việc cho bạn, bạn chỉ cần biết những phương pháp để ghi đè lên.
Trình xử lý sự khác biệt và AsyncTask: Sử dụng AsyncTask khi chuỗi người gọi là Chủ đề giao diện người dùng. Đây là những gì tài liệu android nói:
AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers
tôi muốn nhấn mạnh vào hai điểm:
1) Dễ dàng sử dụng các thread UI (như vậy, sử dụng khi gọi thread UI Thread).
2) Không cần thao tác xử lý. (có nghĩa là: Bạn có thể sử dụng Trình xử lý thay vì AsyncTask, nhưng AsyncTask là một tùy chọn dễ dàng hơn).
Có nhiều điều trong bài đăng này mà tôi chưa nói, ví dụ: UI Thread là gì, tại sao nó dễ dàng hơn. Bạn phải biết một số phương pháp sau từng loại và sử dụng nó, bạn sẽ hoàn toàn hiểu tại sao ..
@: khi bạn đọc tài liệu Android, bạn sẽ thấy:
Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue
Họ có thể có vẻ lạ lúc đầu .Chỉ cần hiểu rằng, mỗi luồng có mỗi hàng đợi tin nhắn. (như một Danh sách việc cần làm) và chuỗi sẽ nhận từng thư và làm điều đó cho đến khi có hàng đợi tin nhắn. (Ah, có thể như bạn hoàn thành công việc của bạn và đi ngủ). Vì vậy, khi Handler giao tiếp, nó chỉ đưa ra một thông báo cho chủ đề người gọi và nó sẽ đợi để xử lý. (sophiscate? nhưng bạn chỉ biết rằng, Handler có thể giao tiếp với chủ đề người gọi theo cách an toàn)
Ok vì vậy ý tưởng là ủy nhiệm các tác vụ có thể mất nhiều thời gian hơn cho các chủ đề khác để chủ đề chính không chờ đợi thông tin từ nơi khác trong khi nó có thể chạy cái gì khác. Vì vậy, trong khi bạn có thể chạy tất cả mọi thứ từ onCreate nó chỉ có lẽ không phải là cách hiệu quả nhất để làm điều đó. – Rarw
Vâng nó phụ thuộc vào cách bạn xác định "hiệu quả". Phương pháp hay nhất cho thấy rằng nếu bạn có thứ gì đó sẽ mất một lượng thời gian "đáng chú ý", thì bạn nên di chuyển nó ra khỏi chuỗi giao diện người dùng, và do đó ra khỏi onCreate. Nó cũng phần nào tùy thuộc vào việc bạn có cần kết quả để hiển thị giao diện người dùng hay không, v.v. Nhưng có, nhận xét của bạn là chính xác nói chung tôi sẽ nói. – mfrankli