Я прихожу из встроенного мира, и я новичок в Kotlin. Я знаю, что есть какой-то механизм, который я могу наследовать и использовать в своем классе, но я не знаю точного названия этого механизма для Android.

Я ищу:

  1. У меня есть действие, и оно создает мой CustomClass
  2. Мой CustomClass выполняет некоторые фоновые задачи, такие как обработка асинхронной связи BLE.
  3. CustomClass не знает, когда будут получены некоторые пакеты.
  4. После получения пакета CusomClass должен вызвать действие и передать данные с помощью этого механизма.

Что было бы лучшим вариантом для выполнения этих обратных вызовов?

P.s .: Приношу свои извинения, я внимательно посмотрел, но даже не знаю имени, чтобы начать поиск.

2
Marcelo 17 Сен 2021 в 06:11

2 ответа

Лучший ответ

Для этой цели можно использовать LiveData. по сути, это наблюдаемый держатель данных, поэтому, когда вы изменяете его данные, все его наблюдатели получают уведомление. это позволяет вам писать реактивный код и сокращать тесно связанную логику. он также осведомлен о жизненном цикле, поэтому ваша деятельность получает уведомление только в том случае, если она активна.

Общая идея заключалась бы в следующем

В вашем CustomClass объявите объект LiveData

class CustomClass{
   // Declare a LiveData object, use any type you want String, Int etc
   val myData: MutableLiveData<String> = MutableLiveData("")

   private fun onBleNotification(notification: String){
       // post to live data, this will trigger all the observers
       myData.postValue(notification)
   }

   ...
}

В своем Activity наблюдайте за объектом LiveData

onCreate(savedInstanceState: Bundle?){
...

    customClass.myData.observe(this, androidx.lifecycle.Observer{
        //Do anything with received command, update UI etc
    })
}
1
mightyWOZ 17 Сен 2021 в 04:01

Вы также можете использовать шину событий или приемник braodcast или interface для достижения вашей цели. Но рекомендуется идея, данная в другом ответе (данные liva, viewmodel).

0
Tausif 17 Сен 2021 в 04:15