You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin中Activity与自定义类异步回调的基础术语是什么?

问题答案

你要找的核心机制是接口回调,针对你的Kotlin+Android+BLE异步场景,下面是最优实现方案:

方案1:Kotlin函数类型回调(优先推荐,代码最简洁)

Kotlin原生支持函数类型作为参数,不需要额外定义接口,逻辑和嵌入式开发中的函数指针高度相似,适配你的场景步骤如下:

  • 第一步:在CustomClass中定义可空的函数类型变量,用于接收回调实现
class CustomClass {
    // 定义回调规则:入参是你要回传的BLE数据(示例为字节数组,可替换为解析后的自定义实体类),无返回值
    var onBleDataReceived: ((ByteArray) -> Unit)? = null

    // 你实际的BLE数据包接收逻辑写在这里,收到数据包时触发回调即可
    private fun onBlePacketCollected(rawData: ByteArray) {
        onBleDataReceived?.invoke(rawData)
    }
}
  • 第二步:在Activity中实例化CustomClass时,直接赋值回调逻辑
class YourActivity : AppCompatActivity() {
    private lateinit var customClass: CustomClass

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 实例化自定义类
        customClass = CustomClass()
        // 实现回调逻辑
        customClass.onBleDataReceived = { bleRawData ->
            // 注意:BLE异步回调默认运行在子线程,更新UI需要切换到主线程
            runOnUiThread {
                // 这里写你收到数据后的处理逻辑,比如更新UI、存储数据等
                Log.d("BLE_RECEIVE", "收到数据包:${bleRawData.contentToString()}")
            }
        }
    }
}

方案2:传统接口回调(兼容Java混编场景)

如果你的项目存在Java和Kotlin混编需求,可以用传统的接口形式实现,逻辑更通用:

  • 第一步:定义回调接口
interface BleDataCallback {
    fun onDataReceived(data: ByteArray)
}
  • 第二步:在CustomClass中持有接口实例
class CustomClass {
    var callback: BleDataCallback? = null

    private fun onBlePacketCollected(rawData: ByteArray) {
        callback?.onDataReceived(rawData)
    }
}
  • 第三步:Activity实现接口并绑定
class YourActivity : AppCompatActivity(), BleDataCallback {
    private lateinit var customClass: CustomClass

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        customClass = CustomClass()
        customClass.callback = this
    }

    // 实现接口方法接收数据
    override fun onDataReceived(data: ByteArray) {
        runOnUiThread {
            // 处理接收到的BLE数据
        }
    }
}

关键注意项

页面销毁时要清空回调引用,避免内存泄漏:

override fun onDestroy() {
    super.onDestroy()
    // 方案1清空逻辑
    customClass.onBleDataReceived = null
    // 方案2清空逻辑
    // customClass.callback = null
}

如果你的项目已经引入Jetpack组件,也可以用LiveData实现数据观察,本质是观察者模式的回调变种,更适合数据需要被多个组件同时监听的场景。

内容的提问来源于stack exchange,提问作者Marcelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:57:02