Middle
Чӣ гуна ташкил медиҳед ҳамкории байни парчам ва хидмат дар барномаи шумо?
sobes.tech AI
Ҷавоб аз AI
Роҳҳои асосии муоширати байни қисм ва хидматҳо чунинанд:
- Хидмати мустаҳкам (Bound Service): Қисм ба хидмат пайваст мешавад ва ба воситаи интерфейси
IBinderба таври мустақим ба усулҳои умумӣ дастрасӣ пайдо мекунад. - Хидмати оғозёбӣ (Started Service): Қисм хидматро бо ирсол кардани ниятҳо (
Intent) бо маълумот оғоз мекунад. Барои пайгирии баргардон, хидмат метавонад ниятҳои паҳншаванда ирсол кунад ёResultReceiver-ро истифода барад. - Ниятҳои паҳншаванда (
BroadcastReceiver): Хидмат ниятҳои паҳншавандаро ирсол мекунад, ки қисм тавассутиBroadcastReceiverгӯш мекунад. - Буси ҳодиса (масалан, GreenDao EventBus, Otto): Барои мубодилаи ҳодисаҳо байни компонентҳо тавассути диспетчери марказӣ истифода мешавад. Хидмат ҳодисаҳоро нашр мекунад ва қисм ба онҳо обуна мешавад.
- LiveData: Қисм метавонад объект
LiveDataдарViewModel-ро назорат кунад, ки ба навбат бо хидмат муошират мекунад (масалан, тавассути репозитор ё даъвати мустақим ба усулҳои хидмат пайвастшуда).
Ҳангоми интихоби усул, ман ба назар мегирам:
- Навъи хидмат (мустаҳкам ё оғозёбӣ).
- Зарурати муоширати дуҷониба.
- Суръати интиқол додани маълумот.
- Давомнокии ҳаёти қисм ва хидмат.
- Фаҳмошавӣ ва нигоҳдории коди.
Масалан, пайваст кардани қисм ба хидмат:
// Қисм
private lateinit var myService: MyService
private var isBound = false
private val connection = object : ServiceConnection {
override fun onServiceConnected(className: ComponentName, service: IBinder) {
val binder = service as MyService.LocalBinder
myService = binder.getService()
isBound = true
}
override fun onServiceDisconnected(arg0: ComponentName) {
isBound = false
}
}
override fun onStart() {
super.onStart()
Intent(requireContext(), MyService::class.java).also { intent ->
requireContext().bindService(intent, connection, Context.BIND_AUTO_CREATE)
}
}
override fun onStop() {
super.onStop()
if (isBound) {
requireContext().unbindService(connection)
isBound = false
}
}
Масалан, ирсол кардани ниятҳои паҳншаванда аз хидмат:
// Хидмат
private fun sendUpdate(data: String) {
Intent("my.app.SERVICE_UPDATE").apply {
putExtra("data", data)
}.also { intent ->
sendBroadcast(intent)
}
}
Масалан, қабул кардани ниятҳои паҳншаванда дар қисм:
// Қисм
private val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
when (intent?.action) {
"my.app.SERVICE_UPDATE" -> {
val data = intent.getStringExtra("data")
// Коркарди маълумот
}
}
}
}
override fun onResume() {
super.onResume()
IntentFilter("my.app.SERVICE_UPDATE").also { filter ->
requireContext().registerReceiver(receiver, filter)
}
}
override fun onPause() {
super.onPause()
requireContext().unregisterReceiver(receiver)
}