Truyền phát hấp dẫn là gì?


89

Tôi đã xem qua thuật ngữ này trong tài liệu android với định nghĩa kèm theo

Đây là những chương trình phát sóng mà dữ liệu được hệ thống giữ lại sau khi kết thúc, do đó các máy khách có thể nhanh chóng truy xuất dữ liệu đó mà không phải đợi chương trình phát sóng tiếp theo.

Nó có nghĩa là gì? Ai đó có thể giải thích 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 một sự cho phép để sử dụng ý định này? Tại sao vậy?

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

3
08/02/2019, dành cho bất kỳ ai đang tìm kiếm chương trình phát sóng hấp dẫn và đã kết thúc tại đây, từ tài liệu chính thức Sticky broadcasts should not be used. They provide no security (anyone can access them), no protection (anyone can modify them), and many other problems. The recommended pattern is to use a non-sticky broadcast to report that something has changed, with another mechanism for apps to retrieve the current value whenever desired.
fangzhzh 08/02/2019

Câu trả lời:


110

Nếu một Hoạt động gọi onPausevới một chương trình phát sóng bình thường, việc nhận Chương trình phát sóng có thể bị bỏ lỡ. Một chương trình phát cố định có thể được kiểm tra sau khi nó được bắt đầu onResume.

Cập nhật 6/23/2020

Truyền phát cố định không được dùng nữa.

Xem sendStickyBroadcasttài liệu .

Phương pháp này không được dùng nữa trong API cấp 21.

Không nên 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 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.

Triển khai thực hiện

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

Tài nguyên


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

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 để biết thêm thông tin
gMale,

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

@gmale Vì vậy, nếu chúng ta hoạt động và chúng tôi đang trong onPause () và chúng tôi đã kêu gọi unregisterReceiver () .. chúng ta sẽ có được phát sóng khi chúng ta tiếp tục trong onResume ()
Kushal

1
@PaulBurke Tôi không tìm thấy tên Mark Murphy trong liên kết nhất định ở trên. Liên kết này chuyển hướng tôi đến câu hỏi không có câu trả lời chính xác. Bạn có thể vui lòng cập nhật URL không?
Vishal Chhodwani

11

sendStickyBroadcast()thực hiện sendBroadcast(Intent)được gọi là cố định, tức 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, để những người khác có thể nhanh chóng truy xuất dữ liệu đó thông qua giá trị trả về 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ề 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 giá trị rỗng BroadcastReceiver- bạn sẽ nhận được Ý định được phát lần cuối 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.


8

Giá trị của chương trình phát sóng cố định là giá trị được phát sóng gần đây nhất và hiện được giữ trong bộ nhớ đệm cố đị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 của trình duyệt mà bạn có thể truy cập bất cứ lúc nào. Truyền phát cố định hiện không được dùng nữa, theo tài liệu dành cho các phương pháp phát cố định ( ví dụ :):

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.


3

Ý định quảng bá bình thường không còn khả dụng 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à cố định, có nghĩa là Intent mà bạn đang gửi vẫn tồn tại sau khi quá trình phát hoàn tất.

bạn tham khảo blog của tôi: nhập mô tả liên kết vào đây


1
Tôi đã thêm sự tiết lộ bắt buộc về quyền tác giả của bạn đối với blog mà bạn đang liên kết đến. Bạn phải tự làm điều này từ bây giờ, nếu không các bài viết của bạn có thể bị xóa vì spam.
Andrew Barber
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.