2012-01-05 42 views
22

Có thể đăng ký động một máy thu phát sóng trong một đoạn để nghe các thay đổi trạng thái kết nối không? Nếu thế thì sao? Nếu không, một số cách giải quyết cho các mảnh là gì?Bộ thu phát sóng động trong Fragment

EDIT: Để đăng ký BroadcastReceiver, bạn cần một Ngữ cảnh. Vì các mảnh vỡ sống trong các hoạt động, có lẽ cách tốt nhất để có được một bối cảnh là chỉ sử dụng getActivity(). Tuy nhiên, như gnorsilva giải thích dưới đây, có một số trường hợp đặc biệt để tìm cho ra.

+0

Bạn có thể cho phép hoạt động của máy chủ xử lý chương trình phát sóng và giao tiếp với đoạn – Neil

+0

Điều đó sẽ không kết hợp hoạt động và đoạn không? một trong những ưu điểm của mảnh là bạn có thể tái sử dụng chúng trong các hoạt động khác. điều này sẽ làm giảm khả năng của bạn để làm như vậy. Tôi có cùng một vấn đề trong một trong các ứng dụng của tôi và nó giống với mọi thứ yêu cầu một ngữ cảnh. Tôi đã kết thúc bằng cách sử dụng một lớp cơ sở hoạt động đóng gói các chức năng mà các mảnh cần. không hoàn toàn bỏ cặp chúng nhưng giúp bảo trì dễ dàng hơn. – FunkSoulBrother

Trả lời

30

user853583 gợi ý là một tốt nhất, nhưng nếu bạn cần truy cập vào một bối cảnh bên trong một đoạn bạn nên sử dụng getActivity().getApplicationContext()

Bạn nên tránh đi qua một hoạt động như một bối cảnh bất cứ khi nào có thể như điều này có thể giới thiệu rò rỉ bộ nhớ - một số đối tượng sẽ giữ cho hoạt động đó sau khi onDestroy() của nó đã được gọi và nó sẽ không được thu gom rác.

Có nói rằng, có những trường hợp khi bạn cần phải vượt qua một hoạt động như một bối cảnh - ví dụ: đối với adapter danh sách

Hai điều hơn mặc dù:

  • vì một mảnh vỡ được gắn và tách ra khỏi một hoạt động, một số lần getActivity() trả về null - bạn có thể gọi nó một cách an toàn bên trong các phương pháp vòng đời nhất định mà bạn biết một hoạt động còn sống, ví dụ: onResume()

  • nếu đoạn của bạn không r Etain tức là ví dụ của nó bị phá hủy về biến đổi định hướng, hãy chắc chắn để unregister nhận của bạn trong đoạn của bạn, ví như bên onPause() hoặc onDestroy()

+0

Lưu ý rằng nếu bạn sử dụng setDebugUnregister (true) cho một máy thu phát thì một tham chiếu đến đoạn của bạn sẽ được duy trì thông qua toàn bộ vòng đời của ứng dụng. Điều này có thể dẫn đến rò rỉ bộ nhớ rõ ràng, đặc biệt là trong quá trình sử dụng nặng :) – greg7gkb

3

Theo như tôi thấy, không có cách nào để đăng ký BroadcastReceiver trong một đoạn. Bạn cần bộ thu phát phát sóng nào? Một giải pháp tốt đẹp là một trong những đề cập here

+2

Mỗi câu hỏi ban đầu, cần phải nghe các chương trình phát sóng được gửi bởi hệ thống - trong trường hợp này các chương trình phát sóng kết nối được gửi khi kết nối wifi. – Theo

1

Bạn có thể đăng ký một máy thu phát sóng như thế này:. getActivity() registerReceiver (. ..

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