2012-08-24 36 views
7

Tôi có một IntentSerivce chạy trong nền đôi khi và nó có thể là một quá trình chạy khá lâu trong một số trường hợp nhất định. Tôi đưa ra một tùy chọn cho người dùng để thoát khỏi ứng dụng mà về cơ bản chỉ dừng lại và bỏ phiếu và bỏ qua bất kỳ thông báo đẩy GCM nào. Nhưng nếu một thông báo đẩy đến và IntentService sẽ mất một lúc để hoàn thành việc cần làm (nhận thông tin từ máy chủ và gửi thông báo cho người dùng nếu cần, như tin nhắn mới đến hoặc điều gì đó).Dừng một IntentService từ một hoạt động

Đây là vấn đề, nếu người dùng chọn "Thoát" ứng dụng trong khi intentservice vẫn chạy, họ sẽ vẫn nhận được thông báo mà tôi không muốn. Tôi biết rằng có phương pháp stopSelf() cho dịch vụ nhưng tôi cần phải dừng nó trong một hoạt động khi tôi biết người dùng "Thoát" ứng dụng thông qua một nút menu. Gửi một số khác intent cho dịch vụ không hoạt động vì các mục đích được xếp hàng đợi và gọi số context.stopService(intent); trong hoạt động của tôi không hoạt động hoặc vì vậy tôi có thể ngăn chặn nó như thế nào?

+0

có thể trùng lặp của [Buộc một IntentService để ngăn chặn ngay lập tức] (http://stackoverflow.com/questions/11258083/forcing- an-intentservice-to-stop-immediately) –

Trả lời

7

Bạn có đang đi qua một Intent mới vào stopService(Intent) hoặc bản gốc được sử dụng trong startService(Intent). Vượt qua mục đích ban đầu sẽ dừng dịch vụ.

Nếu bạn không thể sử dụng Handler để chuyển dịch vụ theo số Message. Để IntentService triển khai giao diện Handler.Callback và tạo Handler(Handler.Callback) mới trong số Activity, chuyển số IntentService làm gọi lại. Sau đó, triển khai onHandleMessage() trong IntentService của bạn để gọi stopSelf() và yêu cầu Activity gửi tin nhắn cho bạn khi bạn muốn nó dừng lại.

+1

Trường hợp nào bạn nhận được từ cá thể dịch vụ (nghĩa là trường hợp Handler.Callback) khi trong Hoạt động bắt đầu từ thông báo? – LiMar

3

Dưới đây đang hoàn toàn làm việc tốt cho tôi để ngăn chặn IntentService từ Hoạt động:

stopService(new Intent(getApplicationContext(), MyIntentService.class)); 
+0

cảm ơn rất nhiều! Nó làm việc hoàn hảo cho tôi! – CodeDoctorJL

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