Ứng dụng của tôi sử dụng dịch vụ được cung cấp bởi ứng dụng khác (của tôi). Tôi đang sử dụng một số bound service wit a Messenger
để truy cập và liên lạc với nó (và vì nó là một ứng dụng khác, nó cũng là một dịch vụ từ xa).bindService() trả về false nhưng unbindService() cần được gọi?
Khi tôi gọi bindService
với mục đích phù hợp và cuộc gọi trả về false
(như dự kiến khi APK cung cấp dịch vụ không xung quanh), tôi giả định từ tài liệu và mã ví dụ, tôi không cần phải unbind
ServiceConnection
. Tuy nhiên, khi làm như vậy trên thiết bị Galaxy Nexus (Jelly Bean) của tôi, tôi nhận được thông báo ServiceConnectionLeaked
nổi tiếng khi hoàn thành Activity
.
Tôi đã vớt rằng điều này bằng cách làm
if (!ctxt.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE)) {
try {
ctxt.unbindService(serviceConnection);
} catch (Throwable t) {}
// Clean up
return;
}
// Store serviceConnection for future use
Tôi tò mò: Có phải tôi chỉ bỏ lỡ điều gì đó trong tài liệu hướng dẫn và nó phải làm việc theo cách này? Tôi đã thêm try ... catch
để đảm bảo rằng ngay cả khi hành vi này thực sự khác trên các thiết bị khác hoặc phiên bản Android, ứng dụng của tôi không bị ảnh hưởng (tiêu cực).
Cảm ơn bạn đã trả lời, nhưng nó vẫn không phù hợp với các mẫu (ví dụ RemoteService trong ApiDemos nào cũng chỉ unbind nếu 'onServiceConnected()' được gọi). Tuy nhiên, vì với sự giúp đỡ của bạn bây giờ tôi có thể thấy rằng ngay cả những mô tả cấp cao dường như cho phép giải thích như vậy, tôi sẽ chấp nhận câu trả lời. – Stephan