Я создаю клиентское приложение для чтения данных с платы CSR через SPP (канал RFCOMM). Для этой цели я использовал пример приложения из Android SDK (Bluetooth-чат), и он отлично работает для небольших объемов данных. Но когда я передаю музыку с доски на устройство, появляется задержка. Я измерил задержку во время цикла, где мы читаем InputStream, подключенный к разъему Bluetooth, и заметил интересный момент - задержка является большой только для некоторых итераций цикла, но для других задержка очень мала - например, 0-10 мс. Может быть, кто-то знает, почему это происходит? И как я могу исправить эту проблему?Проблема с частотой Bluetooth для Bluetooth
Вот код:
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
byte[] buffer = new byte[2048];
// Keep listening to the InputStream while connected
while (true) {
try {
// Read from the InputStream
int byteCount = mmInStream.read(buffer);
Log.d("unique_time", (System.currentTimeMillis() - lastTime) + " " + byteCount);
lastTime = System.currentTimeMillis();
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
}
и журналы выборки (первое число - приращение времени в мс, второй один - читать байт):
03-23 14:45:16.481 24432-25373/coderivium.sbctest D/unique_time﹕ 491 884
03-23 14:45:16.491 24432-25373/coderivium.sbctest D/unique_time﹕ 2 140
03-23 14:45:16.491 24432-25373/coderivium.sbctest D/unique_time﹕ 8 884
03-23 14:45:19.481 24432-25373/coderivium.sbctest D/unique_time﹕ 2985 884
03-23 14:45:19.491 24432-25373/coderivium.sbctest D/unique_time﹕ 7 884
03-23 14:45:19.491 24432-25373/coderivium.sbctest D/unique_time﹕ 2 214
03-23 14:45:19.501 24432-25373/coderivium.sbctest D/unique_time﹕ 12 884
03-23 14:45:19.501 24432-25373/coderivium.sbctest D/unique_time﹕ 2 140
03-23 14:45:19.511 24432-25373/coderivium.sbctest D/unique_time﹕ 7 884
03-23 14:45:19.511 24432-25373/coderivium.sbctest D/unique_time﹕ 1 74
03-23 14:45:19.531 24432-25373/coderivium.sbctest D/unique_time﹕ 21 884
03-23 14:45:19.531 24432-25373/coderivium.sbctest D/unique_time﹕ 2 140
03-23 14:45:19.551 24432-25373/coderivium.sbctest D/unique_time﹕ 11 884
03-23 14:45:19.551 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884
03-23 14:45:19.561 24432-25373/coderivium.sbctest D/unique_time﹕ 7 884
03-23 14:45:19.561 24432-25373/coderivium.sbctest D/unique_time﹕ 1 214
03-23 14:45:19.571 24432-25373/coderivium.sbctest D/unique_time﹕ 11 884
03-23 14:45:19.581 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884
03-23 14:45:19.581 24432-25373/coderivium.sbctest D/unique_time﹕ 1 214
03-23 14:45:19.591 24432-25373/coderivium.sbctest D/unique_time﹕ 7 884
03-23 14:45:19.591 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884
03-23 14:45:19.591 24432-25373/coderivium.sbctest D/unique_time﹕ 2 214
03-23 14:45:19.601 24432-25373/coderivium.sbctest D/unique_time﹕ 7 884
03-23 14:45:19.661 24432-25373/coderivium.sbctest D/unique_time﹕ 57 884
03-23 14:45:19.661 24432-25373/coderivium.sbctest D/unique_time﹕ 2 214
03-23 14:45:19.671 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884
03-23 14:45:19.671 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884
03-23 14:45:19.681 24432-25373/coderivium.sbctest D/unique_time﹕ 2 214
03-23 14:45:19.681 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884
03-23 14:45:19.691 24432-25373/coderivium.sbctest D/unique_time﹕ 6 884
03-23 14:45:19.691 24432-25373/coderivium.sbctest D/unique_time﹕ 2 204
Взгляните на: http://stackoverflow.com/questions/14524866/android-bluetooth-serial-rfcomm-low-baud-rate-slow-transmission и http://stackoverflow.com/questions/9257260/ Android-bluetooth-slow-data-rates-calculate-from-bluetoothsocket – Petro
Спасибо! Но как насчет задержек? Почему скорость меняется так значительно? –
Я не использовал Bluetooth достаточно для ответа, но я предполагаю, что это имеет какое-то отношение к размеру пакета с вашего доски на устройство. Надеюсь, кто-то, у кого больше опыта, может перезвонить. Может, сборщик мусора запишет ваш цикл? – Petro