寻找某个回调的非常基本的术语
Look for the very basic term for a certain callback
我来自嵌入式世界,对 Kotlin 还很陌生。我知道我可以在我的 class 中继承和使用一些机制,但我不知道 Android.
的这个机制的确切名称
我要找的是:
- 我有我的 Activity,这个实例化了我的 CustomClass
- 我的 CustomClass 执行一些后台任务,例如处理 BLE 异步通信
- CustomClass 不知道什么时候会收到一些数据包。
- 一旦收到包,CusomClass应该回调Activity并通过这个机制给出数据。
执行这些回调的最佳选择是什么?
P.s.: 抱歉,我看了很多,但我什至不知道要开始搜索的名字。
您可以使用 LiveData
来达到这个目的。本质上它是一个可观察的数据持有者,所以当你改变它的数据时,它的所有观察者都会得到通知。
这使您能够编写反应式代码并减少紧密耦合的逻辑。它还具有生命周期意识,因此您的 activity 只有在其处于活动状态时才会收到通知。
一般的想法是执行以下操作
在你的 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
})
}
您也可以使用event bus or braodcast receiver or 来达到您的目的。但是推荐其他答案(liva data, viewmodel)中给出的思路。
我来自嵌入式世界,对 Kotlin 还很陌生。我知道我可以在我的 class 中继承和使用一些机制,但我不知道 Android.
的这个机制的确切名称我要找的是:
- 我有我的 Activity,这个实例化了我的 CustomClass
- 我的 CustomClass 执行一些后台任务,例如处理 BLE 异步通信
- CustomClass 不知道什么时候会收到一些数据包。
- 一旦收到包,CusomClass应该回调Activity并通过这个机制给出数据。
执行这些回调的最佳选择是什么?
P.s.: 抱歉,我看了很多,但我什至不知道要开始搜索的名字。
您可以使用 LiveData
来达到这个目的。本质上它是一个可观察的数据持有者,所以当你改变它的数据时,它的所有观察者都会得到通知。
这使您能够编写反应式代码并减少紧密耦合的逻辑。它还具有生命周期意识,因此您的 activity 只有在其处于活动状态时才会收到通知。
一般的想法是执行以下操作
在你的 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
})
}
您也可以使用event bus or braodcast receiver or