2012-02-05 24 views
5

tất cả những gì tôi cần biết là khi tôi có thể thực hiện một số thao tác bằng một chuỗi độc lập, tại sao tôi cần Dịch vụ. Điều đó là gì, một Dịch vụ có thể làm nhưng Chủ đề không thể? Tôi đã đi qua nhiều bài đăng nhưng không thể tìm thấy câu trả lời thỏa đáng.Sự khác nhau giữa Dịch vụ và Chủ đề trong Android?

Trả lời

11

Lợi ích chính của Dịch vụ là truy cập vào đối tượng Ngữ cảnh có chu kỳ sống độc lập. Điều này cho phép tái sử dụng mã chung bởi nhiều hoạt động và, trong trường hợp các dịch vụ công khai hoặc tiếp xúc, nhiều ứng dụng.

Chủ đề là cơ chế để làm việc mà không chặn công việc khác.

Dịch vụ không có nghĩa là một sợi chỉ và một sợi không có nghĩa là một dịch vụ. Chúng là hai thứ rất khác nhau. Tôi có xu hướng sử dụng Dịch vụ trong các tình huống mà tôi cần ngữ cảnh để làm việc trước nhưng muốn mã được tách biệt khỏi các hoạt động của tôi để cải thiện khả năng sử dụng lại.

+0

Ok .. Nếu trong trường hợp tôi chuyển ngữ cảnh trong chuỗi công nhân thì nó có phục vụ mục đích không? – SAMD

+0

bạn đã không giải thích trường hợp hoặc mục đích vì vậy nó khó cho tôi để nói với bạn. –

+0

Thực ra tôi đang tìm một số trường hợp đặc biệt mà một Dịch vụ là một điều cần thiết để được sử dụng. Tôi đã được hỏi câu hỏi này và không thể trả lời, vì vậy tôi đang cố gắng tìm kiếm trợ giúp bằng cách sử dụng Stack Overflow. – SAMD

3

Difference between Service and Threaads

Vui lòng truy cập liên kết này, tôi hy vọng bạn sẽ tìm thấy câu trả lời trong liên kết này.

Tóm lại, sự khác biệt chính giữa Dịch vụ và Chủ đề là, Dịch vụ chạy trên luồng chính (Giao diện người dùng) và chuỗi Chạy trên chuỗi của riêng nó. Nếu chúng tôi đang sử dụng Dịch vụ cho các tác vụ dài thì có thể gây ra Chặn Giao diện người dùng chính.

Vui lòng truy cập liên kết đã cho để biết thêm chi tiết.

29

Dịch vụ: là một thành phần của Android thực hiện hoạt động chạy trong nền, chủ yếu là khi có giao diện người dùng.

Chủ đề: là tính năng cấp độ O.S cho phép bạn thực hiện một số thao tác trong nền.

Mặc dù cả hai khái niệm đều giống nhau nhưng có một số khác biệt quan trọng.

1.Service - nếu nó bị hủy trong khi thực hiện công việc, ở giữa bởi Android do kịch bản bộ nhớ thấp. Sau đó, android sẽ đảm bảo rằng nó sẽ khởi động lại dịch vụ của bạn, nếu bạn đã trả về START_STICKY hoặc START_REDELIVER_INTENT từ onStartCommand().

2.Thread - nếu nó bị android hủy ở giữa do bộ nhớ thấp thì android sẽ không đảm bảo khởi động lại lần nữa. Điều đó có nghĩa là người dùng mất một nửa công việc của mình.

3.Service - là một thành phần của Android, do đó, nó có mức độ ưu tiên được xem xét trong khi hủy ứng dụng do bộ nhớ thấp.

4. Chủ đề - không phải là một thành phần của Android, vì vậy Android sẽ không xem xét ưu tiên luồng trong khi giết ứng dụng do bộ nhớ thấp.

Tôi sẽ cố gắng giải thích điểm thứ ba này.

Cho phép, giả sử bạn có yêu cầu kết nối internet từ hoạt động của mình. Bạn có thể làm điều đó bằng cách sử dụng một dịch vụ (với chuỗi) hoặc trực tiếp bằng cách tạo một luồng trong hoạt động. Hãy xem xét kịch bản thứ hai nơi bạn đang kết nối với internet trong một chủ đề.Sau đó,

i. Điều gì sẽ xảy ra nếu người dùng đóng hoạt động, trong khi luồng vẫn đang chạy trong nền. Chuỗi đó có tiếp tục chạy ở mặt đất không? Câu trả lời là bạn không thể dự đoán được.

ii. Giả sử rằng trong tiếp tục cho kịch bản trên, ngay cả sau khi giết chết hoạt động của bạn chủ đề tiếp tục làm hoạt động dự định của nó. Sau đó, có một tình trạng bộ nhớ thấp phát sinh trong điện thoại của bạn. Sau đó, ứng dụng này sẽ là ứng dụng nhạy cảm đầu tiên bị giết vì không có ưu tiên cho ứng dụng này.

Vì vậy, dòng dưới cùng là: Nếu bạn muốn thực hiện một số chức năng nền nặng thì tốt nhất là nên có một dịch vụ có chuỗi. Nếu bạn cảm thấy rằng chức năng nền đó vẫn còn hoạt động miễn là hoạt động của bạn vẫn còn hoạt động, thì hãy thực hiện hoạt động với chuỗi hoặc hoạt động với nhiệm vụ không đồng bộ.

Hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan