Sự khác biệt giữa Service, Async Task & Thread. Nếu tôi không sai, tất cả chúng được sử dụng để làm một số thứ trong nền. Vậy, làm thế nào để quyết định sử dụng và khi nào?
Sự khác biệt giữa Service, Async Task & Thread. Nếu tôi không sai, tất cả chúng được sử dụng để làm một số thứ trong nền. Vậy, làm thế nào để quyết định sử dụng và khi nào?
Câu trả lời:
Có lẽ bạn đã đọc mô tả tài liệu về họ, tôi sẽ không lặp lại chúng, thay vào đó tôi sẽ cố gắng đưa ra câu trả lời bằng chính lời nói của mình, hy vọng họ sẽ giúp bạn.
Dịch vụ giống như một Hoạt động nhưng không có giao diện người dùng. Có thể nếu bạn muốn tìm nạp thời tiết, ví dụ bạn sẽ không tạo một hoạt động trống cho nó, vì điều này bạn sẽ sử dụng Dịch vụ.
Một chủ đề là một chủ đề, có lẽ bạn đã biết nó từ phần khác. Bạn cần biết rằng bạn không thể cập nhật giao diện người dùng từ một Chủ đề. Bạn cần sử dụng Handler cho việc này, nhưng đọc thêm.
AsyncTask là một Chủ đề thông minh được khuyên nên sử dụng. Thông minh vì nó có thể giúp với các phương thức của nó và có ba phương thức chạy trên luồng UI, rất tốt để cập nhật các thành phần UI.
Tôi đang sử dụng Dịch vụ, AsyncT task thường xuyên. Chủ đề ít hơn, hoặc hoàn toàn không, vì tôi có thể làm hầu hết mọi thứ với AsyncTask.
Đây là câu trả lời dễ nhất cho câu hỏi của bạn
Chủ đề
là một đơn vị thực thi chạy "song song" với Chủ đề chính là một điểm quan trọng, bạn không thể cập nhật thành phần UI từ bất kỳ luồng nào ở đây ngoại trừ luồng chính.
AsyncTask
là một luồng đặc biệt, cung cấp cho bạn các phương thức trợ giúp để cập nhật giao diện người dùng để về cơ bản bạn có thể cập nhật giao diện người dùng ngay cả AsyncTask sẽ chạy trên một luồng nền. Xử lý giao tiếp giữa các quá trình là không cần thiết phải được thực hiện rõ ràng.
Dịch vụ
giải quyết vấn đề trên bởi vì nó sống tách biệt với hoạt động gọi nó để nó có thể tiếp tục chạy ngay cả khi hoạt động bị hủy, nó chạy trong Chủ đề chính (hãy cẩn thận với ANR) sử dụng dịch vụ nền (mở rộng IntentService mà nó tự động tạo ra luồng công nhân cho bạn) . Dịch vụ giống như một hoạt động không có UI , tốt cho nhiệm vụ lâu dài
Một vài thông tin tôi muốn ai đó đã nói với tôi vài ngày trước:
Trường hợp sử dụng của tôi là như thế này: Tôi có một luồng trong không gian toàn cầu được kết nối với máy chủ và một Hoạt động hiển thị kết quả. Khi người dùng nhấn nút home, Hoạt động sẽ chuyển sang nền và Dịch vụ mới được bắt đầu. Dịch vụ này sau đó đọc kết quả từ chuỗi và hiển thị thông tin trong vùng thông báo khi cần. Tôi không lo lắng về việc HĐH phá hủy Hoạt động của tôi vì tôi biết rằng miễn là Dịch vụ hoạt động thì nó sẽ phá hủy chuỗi.
Từ quan điểm của nhà phát triển:
Chủ đề : Được sử dụng để thực thi tập hợp thành mã song song với luồng chính. Nhưng bạn không thể xử lý UI bên trong chuỗi. Cho rằng bạn cần phải sử dụng Handler
. Hadler hoạt động như luồng nhưng cũng có thể xử lý UI.
ASyncTask : Được sử dụng để xử lý các tác vụ mà bạn không thể thực hiện để làm việc trên luồng chính. Ví dụ: một yêu cầu HTTP là một công việc rất nặng không thể xử lý được trên luồng chính, vì vậy bạn xử lý yêu cầu HTTP trong ASyncTask
Nó hoạt động song song với luồng chính của bạn Không đồng bộ trong nền. Nó có một vài phương thức gọi lại được gọi trên tương ứng của chúng sự kiện.
Dịch vụ : Là một quá trình nền. Nó được sử dụng khi bạn phải thực hiện một số xử lý không có bất kỳ UI nào được liên kết với nó.
Service
sẽ không cần thiết chạy trong nền trừ khi bạn sử dụng IntentService
. Nếu bạn bắt đầu một standart Service
từ UiThread, nó sẽ chạy trên UiThread.
Service
sẽ không chạy trong một quy trình khác theo mặc định, nhưng trong quy trình ứng dụng với các thành phần khác. Tốt hơn nên nói rằng nó Service
sẽ chạy trong Nền của Chủ đề mà nó sống bên trong.