Apa itu Siaran Lengket?


90

Saya menemukan istilah ini di dokumentasi android dengan definisi yang menyertainya

Ini adalah siaran yang datanya dipegang oleh sistem setelah selesai, sehingga klien bisa dengan cepat mengambil data tersebut tanpa harus menunggu siaran berikutnya.

Apa artinya? Bisakah seseorang menguraikan penggunaannya dengan contoh tertentu? Saya yakin kami harus meminta izin untuk menggunakan maksud ini? Kenapa begitu?

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

3
08 / Feb / 2019, untuk siapa saja yang mencari siaran tempel dan berakhir di sini, dari dokumen resmi 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

Jawaban:


110

Jika sebuah Aktivitas memanggil onPausedengan siaran normal, menerima Siaran bisa terlewat. Siaran permanen dapat diperiksa setelah dimulai onResume.

Perbarui 6/23/2020

Siaran tempel tidak digunakan lagi.

Lihat sendStickyBroadcastdokumentasi .

Metode ini sudah tidak digunakan lagi di API level 21.

Siaran lengket tidak boleh digunakan. Mereka tidak memberikan keamanan (siapa pun dapat mengaksesnya), tidak ada perlindungan (siapa pun dapat memodifikasinya), dan banyak masalah lainnya. Pola yang disarankan adalah menggunakan siaran non-lengket untuk melaporkan bahwa ada sesuatu yang berubah, dengan mekanisme lain bagi aplikasi untuk mengambil nilai saat ini kapan pun diinginkan.

Melaksanakan

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

Sumber daya


Hai, saya bingung dengan siaran permanen dengan pendaftaran siaran secara statis. Saya baru saja membaca di suatu tempat bahwa perbedaan antara mendaftarkan siaran dalam file manifes dan mendaftar secara terprogram hanya bahwa yang lebih lanjut tidak membatalkan pendaftaran siaran tetapi tetap di sana, sedangkan yang kemudian membatalkan pendaftaran siaran dalam metode onPause ().
Shaista Naaz

Catatan: dalam banyak kasus, siaran permanen harus dihindari. Lihat tautan di jawaban dari @NikhilKatre untuk info lebih lanjut
gMale

@Shaista: penerima manifes beroperasi bahkan saat aplikasi Anda tidak aktif sedangkan penerima terprogram hanya merespons saat aplikasi yang didaftarkan di dalamnya sedang berjalan
gMale

@gmale Jadi, jika kita adalah aktivitas dan kita berada di onPause () dan kita telah memanggil unregisterReceiver () .. Akankah kita mendapatkan siaran ketika kita melanjutkan di onResume ()
Kushal

1
@PaulBurke Saya tidak menemukan nama Mark Murphy di tautan yang diberikan di atas. Tautan ini mengarahkan saya ke pertanyaan bukan pada jawaban yang tepat. Bisakah Anda memperbarui URL ?.
Vishal Chhodwani

11

sendStickyBroadcast()melakukan yang sendBroadcast(Intent)disebut sticky, yaitu Intent yang Anda kirim tetap ada setelah siaran selesai, sehingga orang lain dapat dengan cepat mengambil data tersebut melalui nilai yang dikembalikan registerReceiver(BroadcastReceiver, IntentFilter). Dengan cara lain, ini berperilaku sama seperti sendBroadcast(Intent). Salah satu contoh siaran permanen yang dikirim melalui sistem operasi adalah ACTION_BATTERY_CHANGED. Saat Anda meminta registerReceiver()tindakan itu - bahkan dengan nol BroadcastReceiver- Anda mendapatkan Intent yang terakhir kali disiarkan untuk tindakan itu. Karenanya, Anda dapat menggunakan ini untuk mengetahui status baterai tanpa perlu mendaftarkan semua perubahan status baterai di masa mendatang.


8

Nilai sticky broadcast adalah nilai yang terakhir disiarkan dan saat ini disimpan dalam cache tempel. Ini bukanlah nilai siaran yang diterima sekarang. Saya kira Anda dapat mengatakan ini seperti cookie browser yang dapat Anda akses kapan saja. Siaran lengket sekarang sudah tidak digunakan lagi, sesuai dengan dokumen untuk metode siaran tempel ( misalnya ):

Metode ini sudah tidak digunakan lagi di API level 21. Siaran lengket tidak boleh digunakan. Mereka tidak memberikan keamanan (siapa pun dapat mengaksesnya), tidak ada perlindungan (siapa pun dapat memodifikasinya), dan banyak masalah lainnya. Pola yang disarankan adalah menggunakan siaran non-lengket untuk melaporkan bahwa ada sesuatu yang berubah, dengan mekanisme lain bagi aplikasi untuk mengambil nilai saat ini kapan pun diinginkan.


3

Intent siaran normal tidak tersedia lagi setelah dikirim dan diproses oleh sistem. Jika Anda menggunakan metode sendStickyBroadcast (Intent), Intentnya bersifat sticky, artinya Intent yang Anda kirim tetap ada setelah siaran selesai.

Anda merujuk ke blog saya: masukkan deskripsi tautan di sini


1
Saya telah menambahkan pengungkapan yang diperlukan atas kepengarangan Anda dari blog yang Anda tautkan. Anda harus melakukannya sendiri mulai sekarang, atau posting Anda akan dihapus sebagai spam.
Andrew Barber
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.