Быстрая связь между Сервисом и Деятельностью - PullRequest
1 голос
/ 17 марта 2012

Я изменил код Android-чата Bluetooth, чтобы байты, полученные от службы BluetoothChatService, отправлялись непосредственно в активность BluetoothChat.

Скорость отправки другого устройства Bluetooth составляет 125 кГц, каждый пакет - 20 байт. Таким образом, будет около 125 * 20 байт в секунду, которые должны быть получены службой, а затем отправлены в действие.

Однако я обнаружил, что в данных, полученных в Деятельности, будет потеря пакетов. Я проверил, что данные, полученные в Сервисе, действительно верны.

Это часть кода, которая отправляет 20-байтовый объект в Activity.

mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, 20, -1, buffer)
                        .sendToTarget();

Это обработчик, который возвращает сообщение от BluetoothChatService

private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
           case MESSAGE_READ:
                byte[] readBuf = (byte[]) msg.obj;
    ...}
}

Есть идеи, как решить эту проблему? Спасибо.

1 Ответ

0 голосов
/ 17 марта 2012

Это часть кода, которая отправляет 20-байтовый объект в Activity.

Он отправляет ссылку в ваш буфер.Если вы повторно используете этот буфер при чтении большего количества данных Bluetooth, ваши старые данные могут быть перезаписаны до того, как активность сможет использовать эти данные.

...