2010-08-16 33 views
73

Tôi đã xem qua thuật ngữ này trong tài liệu android với định nghĩa kèmPhát sóng dính là gì?

Đây là những chương trình phát sóng có dữ liệu được tổ chức bởi hệ thống sau khi được hoàn thành, do đó khách hàng có thể nhanh chóng lấy dữ liệu đó mà không cần phải chờ đợi cho tiếp theo phát sóng.

Điều đó có nghĩa là gì? Ai đó có thể xây dựng việc sử dụng nó với một ví dụ cụ thể không? Tôi tin rằng chúng tôi phải yêu cầu sự cho phép sử dụng ý định này? Tại sao như vậy?

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> - Allows an application to broadcast sticky intents. 

Trả lời

96

Vui lòng đọc lời giải thích Mark Murphy ở đây: what is the difference between sendStickyBroadcast and sendBroadcast in Android

Dưới đây là một ví dụ trừu tượng như thế nào người ta có thể sử dụng một truyền phát hấp dẫn:

Intent intent = new Intent("some.custom.action"); 
intent.putExtra("some_boolean", true); 
sendStickyBroadcast(intent); 

Nếu bạn đang lắng nghe để phát sóng này trong một Hoạt động đã bị đóng băng (onPause), bạn có thể bỏ lỡ sự kiện thực tế. Điều này cho phép bạn kiểm tra phát sóng sau khi nó được kích hoạt (onResume).

EDIT: Thông tin thêm về chương trình hấp dẫn ...

Ngoài ra kiểm tra removeStickyBroadcast(Intent), và trên API Level 5 +, isInitialStickyBroadcast() để sử dụng vào những năm Receiver onReceive.

Hy vọng điều đó sẽ hữu ích.

+0

Xin chào, tôi bị nhầm lẫn với quảng cáo cố định với đăng ký tĩnh của chương trình phát sóng. Tôi chỉ đọc ở đâu đó rằng sự khác biệt giữa việc đăng ký phát sóng trong tệp kê khai và đăng ký theo chương trình chỉ là người tiếp tục không hủy đăng ký phát nhưng nó vẫn ở đó, trong khi sau đó không đăng ký phát trong phương thức onPause(). –

+0

Lưu ý: trong hầu hết các trường hợp, nên tránh các chương trình phát sóng dính. Xem [liên kết trong câu trả lời từ @Nikhil_Katre] (http://groups.google.com/group/android-developers/browse_thread/thread/f37e3549a5e1be66?pli=1) để biết thêm thông tin – gMale

+0

@Shaista: trình thu thập thông tin hoạt động ngay cả khi ứng dụng của bạn không hoạt động trong khi trình thu thập có lập trình chỉ phản hồi khi ứng dụng được đăng ký bên trong đang chạy – gMale

20

Xin lưu ý rằng các chương trình phát sóng Chú ý là rất nặng trên hệ thống và không được khuyến khích. Vui lòng đọc ghi chú từ hackbod trong cuộc thảo luận trên 'Sticky Broadcasts and Concurrency Options' trên nhóm Nhà phát triển Android.

@Shouvik, Vui lòng chỉ định kịch bản chính xác nơi bạn đang cân nhắc sử dụng StickyBroadcasts. Ai đó có thể đề xuất một giải pháp thay thế.

+0

+1 để chỉ ra những bất lợi của chương trình phát sóng dính, chưa kể rằng nếu ứng dụng của bạn gặp sự cố (có, điều này có thể xảy ra ngay cả khi bạn gói mọi thứ bằng try/catch và đăng ký 'Thread.setDefaultUncaughtExceptionHandler() '), bạn đang mắc kẹt với một cái gì đó bạn phải cẩn thận xử lý trên lời gọi tiếp theo. Tóm lại, giống như SharedPreferences và ContentProvider, nó có thể rườm rà và quá phức tạp. – ateiob

+0

Bởi "nặng trên hệ thống" bạn có nghĩa là nó có thể làm chậm nó xuống? Khi nào thì sự suy giảm này hiện diện? Trong ứng dụng, hoặc thậm chí không chạy nó? Các ứng dụng Adobe AIR được yêu cầu yêu cầu sự cho phép này vì vậy đây là điều bạn không thể tránh nếu lập trình một ứng dụng AIR, tôi sợ. Hoặc bạn yêu cầu điều này trong aplication của bạn nếu bạn có thời gian chạy AIR nhúng vào ứng dụng của bạn hoặc bạn làm cho người dùng cài đặt thời gian chạy Adobe AIR, mà yêu cầu sự cho phép này. – OMA

+0

Đây là một kịch bản mà tôi đang cố gắng hoàn thành và tự hỏi liệu chương trình phát sóng dính có thực hiện được hay không. Tôi cần phải duy trì trạng thái cho một dịch vụ trong bộ nhớ, ngay cả khi dịch vụ bị giết và không chạm vào bất kỳ tài nguyên bên ngoài nào như flash. Tôi có thể làm điều này mà không dính nhưng chạy vào các vấn đề đồng thời cập nhật trạng thái nếu ý định được phân phối trở lại trở lại. – Michael

1

Mục đích phát sóng bình thường không khả dụng nữa sau khi được hệ thống gửi và xử lý. Nếu bạn sử dụng phương thức sendStickyBroadcast (Intent), Intent là sticky, có nghĩa là Intent bạn đang gửi vẫn ở lại sau khi chương trình phát sóng hoàn tất.

bạn tham khảo blog của tôi: enter link description here

+1

Tôi đã thêm thông tin được yêu cầu về quyền tác giả của blog bạn đang liên kết đến. Bạn * phải * tự làm điều này từ bây giờ hoặc các bài đăng của bạn có thể bị xóa là spam. –

7

sendStickyBroadcast() thực hiện một sendBroadcast(Intent) gọi là nếp, tức là tiếp cận mục đích bạn đang gửi ở lại xung quanh sau khi phát sóng xong, để những người khác có thể nhanh chóng lấy dữ liệu đó thông qua các giá trị trở lại của registerReceiver(BroadcastReceiver, IntentFilter). Trong tất cả các cách khác, điều này hoạt động giống như sendBroadcast(Intent). Một ví dụ về chương trình phát sóng dính được gửi qua hệ điều hành là ACTION_BATTERY_CHANGED. Khi bạn gọi registerReceiver() cho hành động đó - ngay cả với số không BroadcastReceiver - bạn sẽ nhận được Intent được phát sóng lần cuối cho hành động đó. Do đó, bạn có thể sử dụng điều này để tìm trạng thái của pin mà không nhất thiết phải đăng ký cho tất cả các thay đổi trạng thái trong tương lai trong pin.

7

Giá trị của quảng cáo cố định là giá trị được phát sóng lần cuối và hiện được giữ trong bộ nhớ cache dính. Đây không phải là giá trị của một chương trình phát sóng đã được nhận ngay bây giờ. Tôi cho rằng bạn có thể nói nó giống như một cookie trình duyệt mà bạn có thể truy cập bất cứ lúc nào.Chương trình phát cố định hiện không còn được dùng nữa:

Phương pháp này không được dùng ở cấp API 21. Không được sử dụng chương trình phát sóng dính . Chúng không cung cấp bảo mật (bất kỳ ai cũng có thể truy cập chúng), không bảo vệ (bất kỳ ai cũng có thể sửa đổi chúng) và nhiều sự cố khác. Mẫu được đề xuất là sử dụng chương trình phát sóng không dính để báo cáo rằng có điều gì đó đã thay đổi, với một cơ chế khác để ứng dụng truy xuất giá trị hiện tại bất cứ khi nào bạn muốn.

+1

Liên kết tới tài liệu được tham chiếu sẽ rất hữu ích. –

+0

Không thể nhớ tài liệu được tham chiếu. Không biết đây là nghi thức SO nghèo nàn nhưng bây giờ tôi có thể thấy rõ lý do tại sao. Def sao chép và dán này từ một nơi nào đó. –

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