为什么连接到使用反射的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映射到通道,因此前者必须使用SDP查找要连接的通道。
对于后者,您告诉它您想直接连接到通道1,因此不需要进行SDP发现来确定UUID映射到哪个通道。没有SDP查找意味着更少的连接时间。