2010-04-06 31 views

Trả lời

110

Here is what the Android SDK says about sendStickyBroadcast():

Thực hiện một sendBroadcast (Ý định) mà là "dính", có nghĩa là tiếp cận mục đích bạn đang gửi ở lại xung quanh sau khi phát sóng xong, vì vậy mà những người khác có thể nhanh chóng lấy lại dữ liệu thông qua 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ề phát quảng cáo cố đị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ố nullBroadcastReceiver - bạn nhận được số 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.

+6

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

+0

Điều gì xảy ra với ý định dính trên: tắt nguồn? tắt màn hình? ... – phreed

+20

@phreed: "Khi bạn gọi registerReceiver lần thứ hai, nó có trả về cùng một ý định không?" -- Vâng. "điện xuống?" - chúng biến mất, cũng giống như bất cứ thứ gì trong RAM. "tắt màn hình?" - không có hiệu lực. – CommonsWare

37

loại: - Địa phương, bình thường, có thứ tự và Sticky

Bình thường Broadcast

: - sử dụng sendBroadcast()

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

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

Ordered Broadcast

: - sử dụng sendOrderedBroadcast()

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

: - thu nhận được phát sóng trong cơ sở ưu tiên

: - Chúng ta cũng có thể chỉ đơn giản là hủy bỏ phát sóng trong loại này

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

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

Chú ý Broadcast

: - bình thường quảng bá ý định không có sẵn nữa sau là đã gửi và xử lý bởi hệ thống.

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

: - mục đích tương ứng là dính, có nghĩa là mục đích bạn đang gửi ở lại xung quanh sau khi phát sóng xong.

: - vì điều này, 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).

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

9

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

sendstickybroadcast() - mục đích được thông qua với điều này sẽ được áp dụng cho người dùng tương lai đăng ký thông qua mã (người nhận động). Chương trình phát sóng sẽ kết nối với android và sẽ được phát lại hoặc phát lại tới các yêu cầu trong tương lai từ bất kỳ người nhận phát sóng nào

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

Nhưng Bây giờ bạn không nên sử dụng phương pháp sendStickyBroadcast() nó bị phản đối

Từ Tài liệu Android:

Phương pháp này đã được tán thành trong mức API 21. chương trình phát sóng Chú ý nên không được sử dụng. 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. Các mô hình khuyến cáo là sử dụng một phát sóng không dính để báo cáo rằng một cái gì đó đã thay đổi, với một cơ chế khác cho các ứng dụng để lấy giá trị hiện tại bất cứ khi nào mong muốn

Tôi hy vọng điều này sẽ giúp.

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