在BluetoothChat示例上写入蓝牙的非同步方式

时间:2014-01-30 19:49:53

标签: android multithreading bluetooth

这是我第一次参与基于蓝牙的Android应用程序并更好地了解它是如何工作的,我正在研究蓝牙的例子。
或多或少,我认为我理解一切,但我已经到了一点,我不能再进一步了 以这种方式写数据的原因是什么?

public void write(byte[] out) {
    // Create temporary object
    ConnectedThread r;
    // Synchronize a copy of the ConnectedThread
    synchronized (this) {
        if (mState != STATE_CONNECTED) return;
        r = mConnectedThread;
    }
    // Perform the write unsynchronized
    r.write(out);
}

为什么不直接调用mConnectedThread.write(out)? 这个同步的目标是什么?

我理解(显然错误地)此代码仅在主线程上执行,在这种情况下,为什么我们需要这个互斥量?

感谢所有人。
P.S。:对不起我的英语不好!

1 个答案:

答案 0 :(得分:0)

对于问题部分: 这个同步的目标是什么? - 目标似乎是以线程安全的方式访问mThread和mConnect变量(即没有变化正在访问其中一个变量)。此链接(以及其中的其他链接)将在Java Synchronization

上显示更多内容