6

Tôi nhận được một Hoạt động chính, trong đó tôi tạo các trang động bên trong một ViewPager (thông qua FragmentPagerAdapter). Càng xa càng tốt.Binding và unbinding Android Service đến/từ Fragment (trong ViewPager)

Bây giờ tôi đã thực hiện Dịch vụ Tôi muốn hoạt động đó/những đoạn đó liên kết với. Và đây là điểm tôi tự hỏi đó là cách thực hành tốt nhất.

  1. Ràng buộc hoạt động và giao tiếp từ phân đoạn đến Dịch vụ qua Gọi lại qua hoạt động? (binding/unbinding in onCreate()/onDestroy())
  2. Ràng buộc với từng phân đoạn khi tạo và hủy liên kết khi bị hủy? (giống như trên)

Cả hai cách triển khai đều hoạt động. Nhưng thứ hai cung cấp giao tiếp thẳng thắn với dịch vụ.

Khi thử nghiệm các đoạn thứ hai bị ràng buộc với dịch vụ khi tạo. Nhưng khi tôi loại bỏ tất cả nhưng một trong số họ dường như không bị phá hủy. Khi tôi bắt đầu tạo ra các mảnh từ thời điểm đó (chỉ có 1 đoạn sau khi xóa những người khác) một lần nữa, ràng buộc với dịch vụ chỉ diễn ra khi tôi tạo ra nhiều mảnh hơn tôi tạo ra trước đây.

Có lẽ một lần nữa để có cái nhìn tổng quan tốt hơn.

  • tạo hoạt động với một đoạn trong máy nhắn tin: dịch vụ kết nối với mảnh
  • tạo 2 mảnh hơn trong máy nhắn tin: Dịch vụ conntected trên mỗi tạo
  • loại bỏ tất cả nhưng một đoạn: unbinding dường như không được gọi
  • tạo thêm 2 mảnh vỡ một lần nữa: dịch vụ dường như không phải được kết nối
  • tạo đoạn khác: dịch vụ conntected trên tạo

Đây có phải là hành vi mà người ta có thể mong đợi không? Đây có phải là việc thực hiện tôi nên chọn; rõ ràng là giao tiếp thẳng thắn như trên truyền thông gọi lại?

Cảm ơn bạn đã nhập trước!

+3

Tôi đã xây dựng kịch bản tương tự bằng cách sử dụng phương pháp tiếp cận đầu tiên của bạn (hoạt động quản lý liên lạc đến dịch vụ) và nó hoạt động khá tốt. Điều này cho phép tôi chia sẻ kết nối dịch vụ trên tất cả các phân đoạn và cho phép phân đoạn "tiếp cận trực tiếp" hơn với dịch vụ (mà không phải đối phó với sự không đồng bộ của liên kết) – roostertech

Trả lời

4

Tôi thích phương pháp đầu tiên đặc biệt là nếu bạn sử dụng Dịch vụ cục bộ bởi vì bạn có một xử lý đối với dịch vụ của mình.

Giả sử rằng hoạt động của bạn đã có tham chiếu đến Dịch vụ địa phương của bạn được gọi là "MyLocalService" (Thanh toán Local Service Example). Sau đó, từ bên trong mảnh của bạn, bạn có thể dễ dàng gọi một cái gì đó như: getActivity(). GetMyLocalService(). Điều tốt về điều này là mảnh của bạn không phải đối phó với vòng đời của dịch vụ. Hi vọng điêu nay co ich.

+1

Đúng, giúp! ;) Hãy suy nghĩ suy nghĩ của tôi rất ít phức tạp. Cung cấp dịch vụ thông qua một số getActivity() getMyService() sẽ thực hiện thủ thuật và ngăn chặn các lỗi có thể được đề cập với liên kết async. – mauricemoss

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