2012-01-03 23 views

Trả lời

5

Hãy thử gọi stopSelf() từ trong dịch vụ. documentation nói rằng một số quy trình có thể mất nhiều thời gian để hoàn thành, do đó, dịch vụ của bạn có nhiều khả năng đang chờ họ dừng lại. Có lẽ bạn nên xem xét điều đó. Khi tất cả yêu cầu đã hoàn tất, dịch vụ sẽ tự dừng.

+0

Tôi có thể ngừng hoạt động từ một hoạt động không? – user1127497

+1

Giống như tôi đã nói, nếu 'stopService' không giúp ích gì, một quá trình đang hogging nó lên. 'void trừu tượng được bảo vệ onHandleIntent (Intent intent) Vì: API Level 3 Phương thức này được gọi trên chuỗi công nhân với một yêu cầu để xử lý. Chỉ có một Intent được xử lý tại một thời điểm, nhưng việc xử lý xảy ra trên một luồng công nhân chạy độc lập với logic ứng dụng khác. Vì vậy, nếu mã này mất một thời gian dài, nó sẽ giữ các yêu cầu khác cho cùng một IntentService, nhưng nó sẽ không giữ bất cứ thứ gì khác. Khi tất cả các yêu cầu đã được xử lý, IntentService tự dừng, vì vậy bạn không nên gọi stopSelf(). ' –

+2

Bạn có nghĩa là Nếu tôi gọi stopService, một ý định sẽ được gửi đến intentservice. Nếu intentservice đã có một vài ý định trên hàng đợi, "stopervice intent" sẽ không được xử lý cho đến khi những ý định đó được xử lý? – user1127497

5

IntentService được xây dựng để tự dừng khi mục đích cuối cùng được xử lý bởi onHandleIntent(Intent) - tức là bạn không cần phải dừng nó, nó tự dừng khi nó được thực hiện.

1

Theo số documentation Android ngừng dịch vụ sau khi tất cả các yêu cầu bắt đầu đã được xử lý, vì vậy bạn không bao giờ phải gọi stopSelf().

1

Trả lời có liên quan trong trường hợp ai đó có cùng vấn đề. Nếu bạn gọi <yourContext>.stopService(intent) trong đó intentcùng một đối tượng ý định bạn đã sử dụng để khởi động dịch vụ thì nó sẽ hoạt động.

1

Một IntentService được thiết kế để dừng chính nó chỉ khi tất cả các yêu cầu có trong hàng đợi công việc đã được xử lý. Mỗi tài liệu, IntentService lớp "Dừng dịch vụ sau khi tất cả các yêu cầu bắt đầu được xử lý, vì vậy bạn không bao giờ phải call stopSelf() "

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