Sự khác biệt giữa sendStickyBroadcast và sendBroadcast trong Android là gì


Câu trả lời:


120

Đây là những gì SDK Android nói vềsendStickyBroadcast() :

Thực hiện sendBroadcast (Intent) "dính", có nghĩa là Intent bạn đang gửi vẫn tồn tại sau khi quá trình phát sóng hoàn tất, để những người khác có thể nhanh chóng truy xuất dữ liệu đó thông qua giá trị trả về của registerReceiver (BroadcastReceiver, IntentFilter). Theo 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ề truyền phát cố định được gửi qua hệ điều hành là ACTION_BATTERY_CHANGED. Khi bạn kêu gọi registerReceiver()hành động đó - ngay cả với dấu null BroadcastReceiver- bạn sẽ nhận Intentđược lần phát cuối cùng cho hành động đó. Do đó, bạn có thể sử dụng tính năng này để tìm trạng thái của pin mà không nhất thiết phải đăng ký tất cả các thay đổi trạng thái trong tương lai của pin.


6
Ý định dính ở mức nào? Khi bạn gọi registerReceiver lần thứ hai, nó có trả lại cùng mục đích không? (Giả sử không có ý định bổ sung với hành động đó.)
phreed

22
@phreed: "Khi bạn gọi registerReceiver lần thứ hai, nó có trả lại cùng ý định không?" -- Đúng. "sập nguồn?" - chúng biến mất, giống như bất cứ điều gì trong RAM. "tắt màn hình?" - không ảnh hưởng gì.
CommonsWare

1
Bà Hackborn hoàn toàn không khuyến khích việc phát sóng hấp dẫn: groups.google.com/d/msg/android-developers/8341SaXhvmY/… . Đó là một bài đăng cũ nhưng có lẽ vẫn còn áp dụng
Mr_and_Mrs_D

1
@ Commonsware: tôi không thể hiểu points.Explain của bạn với ví dụ ý định bình thường và với ví dụ ý định dính cho cùng scenario.Then nó sẽ hữu ích để tôi có được một ý tưởng rõ ràng
SIVAKUMAR.J

4
@Kushal: "Vì vậy, những gì nên được thay thế cho phát sóng dính bây giờ?" - Tôi thực sự không thể trả lời điều đó, vì tôi không biết trường hợp sử dụng của bạn là gì. Bạn có thể cân nhắc hỏi một câu hỏi Stack Overflow mới, trong đó bạn mô tả yêu cầu kinh doanh của mình, giải thích cách bạn nghĩ đến việc giải quyết nó thông qua các chương trình phát sóng cố định và hỏi các cách thay thế để giải quyết vấn đề tương tự.
CommonsWare

54

Các loại : - Cục bộ, Bình thường, Có thứ tự và Cố định

Phát sóng bình thường

: - sử dụng sendBroadcast ()

: - phát sóng không đồng bộ

: - bất kỳ máy thu nào nhận được phát sóng không theo thứ tự cụ thể nào

Phát sóng có thứ tự

: - sử dụng sendOrderedBroadcast ()

: - phát sóng đồng bộ

: - máy thu nhận được quảng bá trong cơ sở ưu tiên

: - chúng tôi cũng có thể đơn giản hủy phát sóng theo kiểu này

Phát sóng địa phương

: - chỉ sử dụng khi quảng bá chỉ được sử dụng trong cùng một quy trình

Phát sóng hấp dẫn

: - mục đích phát sóng bình thường không còn nữa sau khi điều này được hệ thống gửi và xử lý.

: - sử dụng sendStickyBroadcast (Ý định)

: - ý định tương ứng là cố định, nghĩa là ý định bạn đang gửi vẫn tồn tại sau khi quá trình phát sóng hoàn tất.

: - vì điều này những người khác có thể nhanh chóng lấy dữ liệu đó thông qua giá trị trả về của registerReceiver (BroadcastReceiver, IntentFilter).

: - ngoài điều này giống như sendBroadcast (Intent).


rất hữu ích ..
Maher Abuthraa

10

sendbroadcast() - phát sóng bình thường, nhưng chúng ta cũng có thể đặt mức độ ưu tiên.

sendstickybroadcast()- ý định được thông qua với điều này sẽ phù hợp với những người dùng trong tương lai đang đăng ký thông qua mã (bộ thu động). Chương trình phát sóng sẽ gắn với android và sẽ được phân phối lại hoặc phát lại theo yêu cầu trong tương lai từ bất kỳ bộ thu phát sóng nào

Khi ai đó gửi một chương trình phát sóng cố định bằng cách sử dụng sendstickyBroadcast(intent);thì chương trình phát sóng đó sẽ khả dụng cho những người dùng tương lai đang sử dụng bộ thu động.

Nhưng bây giờ bạn không nên sử dụng sendStickyBroadcast()phương pháp nó không được chấp nhận

Từ Tài liệu Android:

Phương pháp này không được chấp nhận ở cấp API 21. Không nên sử dụng các chương trình phát sóng cố đị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 vấn đề khác. Mô hình được đề xuất là sử dụng chương trình phát sóng không cố đị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 muốn

Tôi hi vọng cái này giúp được.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.