2011-09-27 17 views
9

Tôi đã xây dựng một Dịch vụ và nó không hoạt động như mong đợi, vì vậy tôi đã sửa lỗi nó. Trong quá trình gỡ lỗi, tôi thấy rằng phương thức onDestroy() của dịch vụ được gọi trực tiếp sau khi trở về từ onCreate(). Khi tôi nhận xét việc dọn dẹp xảy ra trong onDestroy(), dịch vụ thực hiện công việc của nó, nhưng đây không phải là giải pháp của tôi. Vì vậy, câu hỏi của tôi là, tại sao onDestroy() gọi quá sớm và tại sao dịch vụ vẫn chạy? Hoặc làm thế nào tôi có thể ngăn chặn onDestroy() khỏi bị gọi sai thời gian?Service.onDestroy() được gọi trực tiếp sau khi tạo, dù sao Dịch vụ thực hiện công việc của mình

Để biết thông tin của bạn: Tôi đã phân loại IntentService.

Cảm ơn bạn đã được trợ giúp.

Binabik

+3

Bạn có thể đăng phiên bản rút gọn của mã của bạn thể hiện sự cố này không? – slayton

+1

Tôi nghĩ chúng ta cần biết cách dịch vụ được bắt đầu và tại sao bạn không chỉ lớp dịch vụ được phân lớp. –

Trả lời

15

Nếu bạn đang subclassing IntentService bạn nên sử dụng onHandleIntent(Intent intent) cho vòng đời của dịch vụ. Dịch vụ của bạn có thể chuyển sang onDestroy nhanh chóng vì bạn không có mã bên trong onHandleIntent. Mặc dù không có mã của bạn tôi không thể nói chắc chắn.

Ngoài ra, có thể aways chuyển sang onDestroy nhanh chóng vì IntentService được tự động tạo luồng cho bạn và có thể chỉ khởi chạy chuỗi công nhân gọi onHandleIntent và chuyển đến onDestroy.

+8

Cảm ơn sự giúp đỡ của bạn. Tôi đã kiểm tra lại nó và bây giờ tôi hiểu rằng việc sử dụng IntentService là một ý tưởng tồi vì IntentService tự dừng lại sau khi trở về từ onHandleIntent(). Tôi thậm chí còn thấy rằng trong tài liệu: "IntentService làm như sau: [...] 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 gọi stopSelf()." Tôi sẽ thử với một dịch vụ "bình thường". – Binabik

+0

Bạn đã cứu mạng tôi :), cảm ơn. – ondermerol

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