Yapışkan Yayın nedir?


90

Bu terime, beraberindeki tanımla birlikte android belgelerinde rastladım

Bunlar, bittikten sonra verileri sistem tarafından tutulan yayınlardır, böylece istemciler bir sonraki yayını beklemek zorunda kalmadan bu verileri hızlı bir şekilde alabilirler.

Bunun anlamı ne? Birisi belirli bir örnekle kullanımını detaylandırabilir mi? Bu amacı kullanmak için izin istememiz gerektiğine inanıyorum. Neden öyle?

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

3
08 / Şub / 2019, sabit yayın arayan ve burada sona eren herkes için, official doc 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

Yanıtlar:


110

Bir Aktivite onPausenormal bir yayınla ararsa , Yayının alınması kaçırılabilir. Yapışkan bir yayın, başlatıldıktan sonra kontrol edilebilir onResume.

Güncelleme 6/23/2020

Sabit yayınlar kullanımdan kaldırıldı.

sendStickyBroadcastBelgelere bakın .

Bu yöntem, API seviyesi 21'de kullanımdan kaldırılmıştır.

Yapışkan yayınlar kullanılmamalıdır. Hiçbir güvenlik (bunlara herkes erişebilir), koruma (kimse bunları değiştirebilir) ve daha birçok sorun sağlamaz. Önerilen model, uygulamaların istendiğinde mevcut değeri alması için başka bir mekanizma ile bir şeyin değiştiğini bildirmek için yapışkan olmayan bir yayın kullanmaktır.

Uygulama

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

Kaynaklar


Merhaba, Sticky yayın ile yayının statik olarak kaydedilmesi ile karıştırılmaya başladım. Bir yerde, bir yayını manifest dosyasında kaydetme ile programlı olarak kaydetme arasındaki farkın, yalnızca bir sonraki yayının kaydını silmez, ancak orada kalır, daha sonra ise yayının onPause () yönteminde kaydını siler.
Shaista Naaz

Not: Çoğu durumda, yapışkan yayınlardan kaçınılmalıdır. Daha fazla bilgi için @Nikhil_Katre'nin cevabındaki bağlantıya bakın
gMale

@Shaista: manifest alıcıları uygulamanız hareketsizken bile çalışır, oysa programlı bir alıcı yalnızca içinde kayıtlı olduğu uygulama çalışırken yanıt verir
gMale

@gmale Yani, eğer etkinlikteysek ve onPause () içindeysek ve unregisterReceiver () 'ı çağırmışsak .. onResume ()
Kushal

1
@PaulBurke Yukarıda verilen bağlantıda Mark Murphy ismini bulamadım . Bu Bağlantı beni tam yanıta değil soruya yönlendiriyor. Lütfen URL’yi günceller misiniz?
Vishal Chhodwani

11

sendStickyBroadcast()sendBroadcast(Intent)yapışkan olarak bilinen bir işlemi gerçekleştirir , yani gönderdiğiniz Niyet yayın tamamlandıktan sonra ortalıkta kalır, böylece diğerleri bu veriyi dönüş değeri üzerinden hızlı bir şekilde alabilir registerReceiver(BroadcastReceiver, IntentFilter). Diğer tüm şekillerde, bu aynı şekilde davranır sendBroadcast(Intent). İşletim sistemi aracılığıyla gönderilen yapışkan yayına bir örnek ACTION_BATTERY_CHANGED. Bu registerReceiver()eylemi çağırdığınızda - boş olsa bile - o eylem BroadcastReceiveriçin en son yayınlanan Niyeti alırsınız. Bu nedenle, pilin gelecekteki tüm durum değişikliklerini kaydetmeden pilin durumunu bulmak için bunu kullanabilirsiniz.


8

Yapışkan bir yayının değeri, son yayınlanan ve şu anda yapışkan önbellekte tutulan değerdir. Bu, şu anda alınan bir yayının değeri değil. Sanırım bunun, istediğiniz zaman erişebileceğiniz bir tarayıcı çerezi gibi olduğunu söyleyebilirsiniz. Yapışkan yayın, yapışkan yayın yöntemleri ( ör. ) Dokümanlarına göre artık kullanımdan kaldırılmıştır :

Bu yöntem API seviyesi 21'de kullanımdan kaldırılmıştır. Yapışkan yayınlar kullanılmamalıdır. Hiçbir güvenlik (bunlara herkes erişebilir), koruma (kimse bunları değiştirebilir) ve daha birçok sorun sağlamaz. Önerilen model, uygulamaların istendiğinde mevcut değeri alması için başka bir mekanizma ile bir şeyin değiştiğini bildirmek için yapışkan olmayan bir yayın kullanmaktır.


3

Sistem tarafından gönderilip işlendikten sonra normal bir yayın Niyeti artık kullanılamaz. SendStickyBroadcast (Amaç) yöntemini kullanırsanız, Amaç yapışkandır, yani gönderdiğiniz Amaç yayın tamamlandıktan sonra ortalıkta kalır.

bloguma başvuruyorsunuz: buraya bağlantı açıklamasını girin


1
Bağlandığınız blogun yazarlığına ilişkin gerekli açıklamayı ekledim. Bunu bundan sonra kendiniz yapmalısınız , aksi takdirde gönderileriniz spam olarak silinmeye tabi olacaktır.
Andrew Barber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.