Tôi có Hoạt động và Dịch vụ. Khi Bắt đầu hoạt động, nó gọi số startService()
để làm cho Dịch vụ này hoạt động ngay cả khi Hoạt động bị hủy và bindService()
, để liên lạc với Dịch vụ này.Dịch vụ Android: onBind (Intent) và onUnbind (Intent) được gọi chỉ một lần
bindService()
trả về true, mService.onBind()
được gọi và ServiceConnection.onServiceConnected()
cũng được gọi. Tất cả các công việc.
Khi tôi hủy Hoạt động của mình bằng cách bấm phím Quay lại, nó gọi số unbindService()
và số mService.onUnbind()
của tôi được gọi. (I trở false
trong onUnbind()
này.)
Sau đó, tôi bắt đầu Hoạt động này một lần nữa, bindService()
trả về true, và sau đó mService.onBind()
là KHÔNG gọi! Nhưng ServiceConnection.onServiceConnected()
được gọi là quá, và tất cả các công trình một lần nữa.
Dường như Dalvik nhớ nội dung của tôi onBind()
đã trả lại lần cuối và không gọi lại onBind()
. Khi tôi hủy Hoạt động của mình lần nữa, onUnbind()
là NOT cũng được gọi.
Tôi có thể liên kết và hủy liên kết Dịch vụ này với Hoạt động của tôi bất kỳ số lần nào, nhưng các phương pháp này sẽ không được gọi nữa cho đến khi tôi hủy Dịch vụ bằng cách hủy liên kết và gọi stopService()
.
Trong tài liệu tôi không thể tìm thấy bất kỳ giải thích nào về hành vi này. Ngược lại, this figure cho thấy rằng onBind()
và onUnbind()
nên được gọi mỗi khi khách hàng ràng buộc và hủy liên kết Dịch vụ. Con số này có thể được tìm thấy ở dưới cùng của this Dev Guide.
oh cảm ơn. Tôi đã bỏ lỡ điều này, thật không may. Tuy nhiên, tôi phát hiện ra rằng tôi có thể trả về true trong 'onUnbind()', và sau đó 'onRebind()' và 'onUnbind()' sẽ được gọi cho máy khách tiếp theo. –
Tài liệu thực sự gây hiểu lầm. Nó nói rằng không có nhiều cuộc gọi đến 'onBind()' được thực hiện, nhưng điều này chỉ áp dụng cho trường hợp của nhiều máy khách. Tài liệu cũng nói rằng "nếu dịch vụ của bạn được bắt đầu và chấp nhận ràng buộc, thì khi hệ thống gọi phương thức onUnbind() của bạn, bạn có thể trả về true nếu bạn muốn nhận cuộc gọi đến onRebind() trong lần tiếp theo khách hàng liên kết với dịch vụ (** thay vì nhận cuộc gọi đến onBind() **) ". Chỉ có không có cuộc gọi đến 'onBind()'. Tuy nhiên, một trường hợp khác khi tài liệu là sai. – Malcolm
xin lỗi vì đã gặp phải @Malcolm ... tôi có câu hỏi liên quan đến công cụ Binding và unBinding đó.Điều gì xảy ra nếu tôi đặt một ServerSocket Thread bên trong Service đó, và trong Activity-A tôi đặt onStart() và onStop() với binding và unbinding cho phù hợp. Nó sẽ được tạo lại nếu tôi chuyển sang một hoạt động khác và ràng buộc nó một lần nữa? hoặc Chủ đề vẫn còn là chủ đề cuối cùng? – gumuruh