Android Kotlin开发中这段BLE相关的ScanResultAdapter代码如何理解?
代码含义详解
你的初步猜测是正确的,这段代码确实是声明并初始化RecyclerView的适配器实例scanResultAdapter,各部分逻辑拆解如下:
private val scanResultAdapter: ScanResultAdapter by lazy
这行是变量声明:private val表示这是当前类的私有只读变量,类型为ScanResultAdapter;by lazy是Kotlin的懒加载委托,代表这个适配器实例不会在页面初始化时就创建,只会在第一次被调用时才执行后续的初始化逻辑,可以降低页面启动性能消耗。- 懒加载块内的
ScanResultAdapter(scanResults) { result -> ... }是适配器实例的构造逻辑:- 第一个入参
scanResults是扫描得到的BLE设备结果列表,适配器会基于这个列表的数据渲染RecyclerView的每个条目。 - 第二个入参是Lambda形式的条目点击回调,当用户点击某一条扫描到的BLE设备条目时,就会触发这段逻辑,回调的参数
result就是用户点击的条目对应的BLE扫描结果对象。
- 第一个入参
- 点击回调内部逻辑:
- 首先判断当前是否还处于扫描状态
isScanning,如果是就调用stopBleScan()停止扫描,避免连接设备的同时还在持续扫描消耗硬件资源。 with(result.device) { ... }是Kotlin标准作用域函数,在该代码块内可以直接调用BLE设备对象result.device的属性和方法,无需重复写前缀:- 首先打印日志,输出待连接的BLE设备的MAC地址
address - 调用BLE设备的
connectGatt()方法发起GATT连接,三个入参分别是Android上下文、是否自动重连、GATT事件回调对象gattCallback,后续设备连接状态变化、数据读写等事件都会触发gattCallback内的对应方法。
- 首先打印日志,输出待连接的BLE设备的MAC地址
- 首先判断当前是否还处于扫描状态
内容的提问来源于stack exchange,提问作者Prabh Singh
相关产品推荐
相关产品推荐

