关闭BluetoothSocket的正确方法

时间:2017-04-10 16:01:21

标签: java android

我以这样的方式创建了gpsSocket

final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
final BluetoothDevice gpsDevice = bluetoothAdapter.getRemoteDevice(bluetoothAddr);
gpsSocket = gpsDevice.createRfcommSocketToServiceRecord(RFCOMM_UUID);
                gpsSocket.connect();

为简单起见,我删除了错误处理。

之后我设置了一些东西来开始使用socket:

final InputStream in = gpsSocket.getInputStream();
final BufferedReader reader = new BufferedReader(new InputStreamReader(in, "US-ASCII"));

如果我在从reader阅读时发现异常,我应该关闭reader, 或gpsSocket,或两者兼而有之?

1 个答案:

答案 0 :(得分:2)

根据经验,您应该始终关注关闭对象,即Closeable s。

BluetoothSocketBufferedReader都会实现Closeable接口,这意味着只要您完成该对象,就应该通过调用close()来处理它们否则你最终会导致内存泄漏。

结构看起来像这样:

BufferedReader reader;

try {
    reader = ... // initialization
} catch (some exception) {
    ...
} finally {
    if (reader != null) {
        reader.close();
    }
}
  

我应该关闭阅读器 gpsSocket 还是两者?

你当然应该关闭reader。如果您不再需要gpsSocket,那么您也应该关闭它。但正如documentation of BluetoothSocket.close()中所见:

  

如果流已经关闭,则调用此方法无效。