Що таке липка трансляція?


90

Я натрапив на цей термін у документації для android із супровідним визначенням

Це трансляції, дані яких система зберігає після завершення, так що клієнти можуть швидко отримати ці дані, не чекаючи наступної трансляції.

Що це означає? Чи може хтось детальніше описати його використання на конкретному прикладі? Я вважаю, що ми повинні запитати дозвіл на використання цього наміру? Чому так?

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

3
08 лютого / 2019, для тих, хто шукав липку трансляцію і закінчив тут, від офіційного документа 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

Відповіді:


110

Якщо Активність дзвонить onPauseіз звичайною трансляцією, отримання трансляції можна пропустити. Клейку трансляцію можна перевірити після її започаткування в onResume.

Оновлення 23.06.2020

Важкі трансляції застаріли.

Див. sendStickyBroadcastДокументацію .

Цей метод застарів на рівні 21 API.

Не слід використовувати липкі трансляції. Вони не забезпечують ніякої безпеки (будь-хто може отримати до них доступ), ніякого захисту (хтось може їх змінити) та багатьох інших проблем. Рекомендований шаблон - використовувати нелипку трансляцію, щоб повідомити про те, що щось змінилося, з іншим механізмом для додатків отримувати поточне значення за необхідності.

Впровадити

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

Ресурси


Привіт, я плутаюся з липкою трансляцією зі статичною реєстрацією трансляції. Я просто десь читав, що різниця між реєстрацією трансляції у файлі маніфесту та програмною реєстрацією полягає лише в тому, що подальша не реєструє трансляцію, але вона залишається там, тоді як пізніша реєструє трансляцію в методі onPause ().
Шаїста Нааз,

Примітка: у більшості випадків слід уникати липких трансляцій. Дивіться посилання у відповіді від @Nikhil_Katre для отримання додаткової інформації
gMale

@Shaista: маніфест-приймачі працюють навіть тоді, коли ваш додаток перебуває в режимі неактивності, тоді як програмний приймач відповідає лише тоді, коли працює програма, в якій він зареєстрований
gMale

@gmale Отже, якщо ми займаємося діяльністю і знаходимося в onPause (), і ми зателефонували unregisterReceiver () .. Чи отримаємо трансляцію, коли відновимо роботу в onResume ()
Кушаль

1
@PaulBurke Я не знайшов імені Марк Мерфі у наведеному вище посиланні. Це посилання перенаправляє мене на питання не з точною відповіддю. Чи можете ви оновити URL-адресу?
Vishal Chhodwani

11

sendStickyBroadcast()виконує sendBroadcast(Intent)відомий як липкий, тобто намір, який ви відправляєте, залишається навколо після завершення трансляції, щоб інші могли швидко отримати ці дані через повернене значення registerReceiver(BroadcastReceiver, IntentFilter). У всіх інших відносинах це поводиться так само, як sendBroadcast(Intent). Одним із прикладів липкої трансляції, надісланої через операційну систему, є ACTION_BATTERY_CHANGED. Коли ви закликаєте registerReceiver()до цієї дії - навіть з нулем BroadcastReceiver- ви отримуєте намір, який останній раз транслювався для цієї дії. Отже, ви можете використовувати це, щоб знайти стан акумулятора, не обов'язково реєструючи всі майбутні зміни стану батареї.


8

Значення липкої трансляції - це значення, яке було останньою трансляцією і в даний час зберігається в липкому кеші. Це не значення трансляції, яка була отримана прямо зараз. Припускаю, ви можете сказати, що це як файли cookie браузера, до яких ви можете отримати доступ у будь-який час. Наразі липка трансляція застаріла відповідно до документів щодо методів липкої трансляції ( наприклад ):

Цей метод застарів на рівні API 21. Не слід використовувати липкі трансляції. Вони не забезпечують безпеки (будь-хто може отримати до них доступ), захисту (хтось може їх змінити) та багатьох інших проблем. Рекомендований шаблон - використовувати нелипку трансляцію, щоб повідомити про те, що щось змінилося, з іншим механізмом для додатків отримувати поточне значення за бажанням.


3

Звичайний намір трансляції більше не доступний після того, як система надсилає та обробляє. Якщо ви використовуєте метод sendStickyBroadcast (Intent), намір є липким, тобто намір, який ви надсилаєте, залишається навколо після завершення трансляції.

Ви посилаєтесь на мій блог: введіть тут опис посилання


1
Я додав необхідне розкриття вашого авторства над блогом, на який ви посилаєтесь. Відтепер ви повинні робити це самостійно, інакше ваші публікації можуть бути видалені як спам.
Ендрю Барбер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.