Ответ 1
Исправление для решения заключалось в том, чтобы создать строку в подключенном потоке непосредственно после вызова read() в InputStream и затем передать строку обратно в основной поток для отображения. По какой-либо причине передача байтового массива между потоками привела к значительному повторению и потере данных.
Измененный код run():
public void run() {
byte[] buffer = new byte[256]; // buffer store for the stream
int bytes; // bytes returned from read()
// Keep listening to the InputStream until an exception occurs
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer);
String readMessage = new String(buffer, 0, bytes);
// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(MESSAGE_READ, bytes, -1, readMessage)
.sendToTarget();
} catch (IOException e) {
break;
}
}
}
И прием обработчика:
case MESSAGE_READ:
// Read in string from message, display to mainText for user
String readMessage = (String) msg.obj;
if (msg.arg1 > 0) {
mainText.append(readMessage);
}