Android'de sendStickyBroadcast ve sendBroadcast arasındaki fark nedir


Yanıtlar:


120

İşte Android SDK'nın söylediği şeysendStickyBroadcast() :

"Yapışkan" olan bir sendBroadcast (Niyet) gerçekleştirin, yani gönderdiğiniz Niyet yayın tamamlandıktan sonra ortalıkta kalır, böylece diğerleri bu verileri registerReceiver'ın (BroadcastReceiver, IntentFilter) dönüş değeri aracılığıyla hızlı bir şekilde alabilir. Diğer tüm şekillerde, bu, sendBroadcast (Intent) ile aynı şekilde davranır.

İşletim sistemi aracılığıyla gönderilen yapışkan yayına bir örnek ACTION_BATTERY_CHANGED. Bu registerReceiver()eylemi çağırdığınızda - a ile bile null BroadcastReceiver- Intento eylem için son yayını alırsınız . Bu nedenle, pilin gelecekteki tüm durum değişikliklerini kaydetmeden pilin durumunu bulmak için bunu kullanabilirsiniz.


6
Niyet ne kadar yapışkan? RegisterReceiver'ı ikinci kez aradığınızda, aynı amacı tekrar döndürüyor mu? (Bu eylemle ilgili ek bir niyet olmadığını varsayarsak.)
2012'de

22
@phreed: "registerReceiver'ı ikinci kez aradığınızda, aynı amacı tekrar döndürüyor mu?" -- Evet. "gücü kesmek?" - RAM'deki her şey gibi giderler. "Ekran kapalı?" -- etkisi yok.
CommonsWare

1
Sabit yayınların Bayan Hackborn tarafından kesinlikle tavsiye edilmediğini eklemek için: groups.google.com/d/msg/android-developers/8341SaXhvmY/… . Bu eski bir gönderi ama muhtemelen hala geçerli
Mr_and_Mrs_D

1
@ Commonsware: Puanlarınızı anlayamıyorum.Normal niyet örneği ve aynı senaryo için yapışkan niyet örneği ile
açıklayın.Ardından

4
@Kushal: "Peki şimdi yapışkan yayın için alternatif ne olmalı?" - Kullanım durumunuzun ne olduğunu bilmediğim için buna gerçekten cevap veremem. Yeni bir Stack Overflow sorusu sormayı düşünebilirsiniz, burada iş gereksinimlerinizi açıklayın, yapışkan yayınlar yoluyla bunu nasıl çözmeyi düşündüğünüzü açıklayın ve aynı sorunu çözmek için alternatif yollar isteyin.
CommonsWare

54

Türler : - Yerel, Normal, Sıralı ve Yapışkan

Normal Yayın

: - sendBroadcast () kullanın

: - eşzamansız yayın

: - herhangi bir alıcı belirli bir sipariş değil yayın alır

Sıralı Yayın

: - sendOrderedBroadcast () kullanın

: - eşzamanlı yayın

: - alıcı yayını öncelikli bazda alır

: - bu türdeki yayını da iptal edebiliriz

Yerel Yayın

: - yalnızca yayın yalnızca aynı işlem içinde kullanıldığında kullanın

Yapışkan Yayın

: - normal yayın amacı, sistem tarafından gönderildikten ve işlendikten sonra artık kullanılamaz.

: - sendStickyBroadcast (Amaç) kullanın

: - karşılık gelen niyet yapışkan, yani gönderdiğiniz niyet yayın tamamlandıktan sonra ortalıkta kalıyor.

: - bu nedenle başkaları, registerReceiver'ın (BroadcastReceiver, IntentFilter) dönüş değeri aracılığıyla bu verileri hızla alabilir.

: - bunun dışında sendBroadcast (Niyet) ile aynı.


10

sendbroadcast() - normal yayın, ancak önceliği de belirleyebiliriz.

sendstickybroadcast()- bununla aktarılan niyet, kod aracılığıyla kaydolan gelecekteki kullanıcılar için (dinamik alıcılar) çubuk olacaktır. Android'e bağlı kalacak ve herhangi bir yayın alıcısından gelecek taleplere yeniden teslim edilecek veya yeniden yayınlanacak yayın

Biri sendstickyBroadcast(intent);bunu kullanarak yapışkan bir yayın gönderdiğinde, o yayın dinamik alıcılar kullanan gelecekteki kullanıcılar için mevcut olacaktır.

Ama şimdi sendStickyBroadcast()yöntemi kullanmamalısın , bu kullanımdan kaldırıldı

Android Belgelerinden:

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 sağlamazlar (bunlara herkes erişebilir), koruma sağlamaz (herkes bunları değiştirebilir) ve daha birçok sorun sağlar. Önerilen model, bir şeyin değiştiğini bildirmek için yapışkan olmayan bir yayın kullanmak, uygulamaların istendiğinde mevcut değeri alması için başka bir mekanizma kullanmaktır.

Umarım bu yardımcı olur.

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.