为什么使用反射连接到 createRfcommSocket 创建的蓝牙套接字比 createInsecureRfcommSocketToServiceRecord 创建的蓝牙套接字更快?
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
socket.connect();
对比
Class<?> cls = temp.getRemoteDevice().getClass();
Class<?>[] paramTypes = new Class<?>[]{ Integer.TYPE };
Method m = cls.getMethod("createRfcommSocket", paramTypes);
Object[] params = new Object[]{ Integer.valueOf(1) };
fallbackSocket = (BluetoothSocket) m.invoke(temp.getRemoteDevice(), params);
在长距离连接设备时,这种差异尤其明显。传统方法无法多次连接,更不用说连接调用需要明显更长的时间来处理。另一方面,通过反射方法创建的套接字的连接是第一次建立,并且调用 connect() 很快。
有没有比较简单的解释呢?
最佳答案
相对简单的解释是,前一种方法是连接到SDP服务记录。 SDP 将 UUID 映射到 channel ,因此前者必须查找要使用 SDP 连接的 channel 。
对于后者,您告诉它您想要直接连接到 channel 1,因此无需进行 SDP 发现即可确定 UUID 映射到哪个 channel 。没有 SDP 查找意味着连接时间更少。
关于android - 为什么连接到由 createRfcommSocket 创建的套接字比 createInsecureRfcommSocketToServiceRecord 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25341996/