Dalam proses mem-porting aplikasi iPhone ke android, saya mencari cara terbaik untuk berkomunikasi di dalam aplikasi. Tampaknya niat menjadi cara yang harus dilakukan, apakah ini opsi (satu-satunya) terbaik? NSUserDefaults tampaknya memiliki bobot yang jauh lebih ringan daripada Intent dalam performa dan pengkodean.
Saya juga harus menambahkan Saya memiliki subkelas aplikasi untuk negara bagian, tetapi saya perlu membuat aktivitas lain mengetahui suatu peristiwa.
Jawaban:
Anda dapat mencoba ini: http://developer.android.com/reference/java/util/Observer.html
sumber
Persamaan terbaik yang saya temukan adalah LocalBroadcastManager yang merupakan bagian dari Paket Dukungan Android .
Dari dokumentasi LocalBroadcastManager:
Saat menggunakan ini, Anda dapat mengatakan bahwa
Intent
an sama dengan anNSNotification
. Berikut ini contohnya:ReceiverActivity.java
Suatu aktivitas yang mengawasi pemberitahuan untuk acara bernama
"custom-event-name"
.SenderActivity.java
Aktivitas kedua yang mengirim / menyiarkan notifikasi.
Dengan kode di atas, setiap kali tombol
R.id.button_send
diklik, Intent disiarkan dan diterima olehmMessageReceiver
dalamReceiverActivity
.Output debug akan terlihat seperti ini:
sumber
NSNotificationCenter
, harus menjadi jawaban yang diterima!Ini adalah sesuatu yang mirip dengan jawaban @Shiki, tetapi dari sudut pandang pengembang iOS dan pusat Notifikasi.
Pertama buat beberapa jenis layanan NotificationCenter:
Kemudian, Anda juga memerlukan beberapa jenis enum untuk mengamankan kesalahan dalam pengkodean dengan string - (NotificationType):
Berikut adalah penggunaan (tambah / hapus pengamat) misalnya dalam aktivitas:
dan inilah akhirnya cara kami memposting pemberitahuan ke NotificationCenter dari beberapa panggilan balik atau layanan istirahat atau apa pun:
itu dia, cheers!
sumber
Bundle params
daripadaHashMap
lebih nyaman untuk melewatkan parameter dari jenis yang berbeda. Ada hubungan yang bagus antaraIntent
danBundle
:intent.putExtras(params)
Anda dapat menggunakan ini: http://developer.android.com/reference/android/content/BroadcastReceiver.html , yang memberikan perilaku serupa.
Anda dapat mendaftarkan penerima secara terprogram melalui Context.registerReceiver (BroadcastReceiver, IntentFilter) dan itu akan menangkap maksud yang dikirim melalui Context.sendBroadcast (Intent).
Namun, perhatikan bahwa penerima tidak akan mendapatkan notifikasi jika aktivitasnya (konteks) telah dijeda.
sumber
Saya menemukan bahwa penggunaan EventBus of Guava lib adalah cara paling sederhana untuk komunikasi gaya-langganan-publikasi antar komponen tanpa memerlukan komponen untuk mendaftar secara eksplisit satu sama lain
lihat contoh mereka di https://code.google.com/p/guava-libraries/wiki/EventBusExplained
Anda bisa menambahkan lib ini hanya di Android Studio dengan menambahkan dependensi ke build.gradle Anda:
sumber
Kotlin : Berikut adalah versi @ Shiki di Kotlin dengan sedikit refactor dalam sebuah fragmen.
Fragment.kt
Posting pemberitahuan di mana saja. Hanya Anda yang membutuhkan konteksnya.
PS :
activity
(terkadangnull
) atauconext
seperti yang saya gunakan.sumber
Anda bisa menggunakan referensi yang lemah.
Dengan cara ini Anda dapat mengelola memori sendiri dan menambah serta menghapus pengamat sesuka Anda.
Saat Anda addObserver menambahkan parameter ini - mentransmisikan konteks tersebut dari aktivitas yang Anda tambahkan ke antarmuka kosong, tambahkan nama notifikasi, dan panggil metode untuk menjalankan antarmuka.
Metode untuk menjalankan antarmuka akan memiliki fungsi yang disebut run untuk mengembalikan data yang Anda kirimkan seperti ini
Buat kelas observasi yang memanggil referensi dengan antarmuka kosong. Juga buat antarmuka Themethodtorun Anda dari konteks yang diteruskan di addobserver.
Tambahkan observasi ke struktur data.
Untuk memanggilnya akan menjadi metode yang sama namun yang perlu Anda lakukan hanyalah menemukan nama notifikasi spesifik dalam struktur data, gunakan Themethodtorun.run (notification_name, data).
Ini akan mengirim panggilan balik ke mana pun Anda membuat pengamat dengan nama notifikasi tertentu. Jangan lupa untuk menghapusnya setelah Anda selesai!
Ini adalah referensi yang bagus untuk referensi yang lemah.
http://learningviacode.blogspot.co.nz/2014/02/weak-references-in-java.html
Saya sedang dalam proses mengunggah kode ini ke github. Buka mata!
sumber