处理程序后执行队列顺序不正确

时间:2019-01-30 15:40:20

标签: android bluetooth-lowenergy threadpool handler

我正在与蓝牙BLE设备(使用针对我们产品开发的自定义协议)进行通信的android应用程序上工作。

连接到设备后,我有回叫public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) 每次设备要向我发送数据时都会触发。 在应用程序体系结构中,我们有操作(例如getDeviceStatus()),该协议按以下方式工作:电话连接到设备->进行握手->发送命令(以字节为单位)->设备以命令响应(正常/不正常) )->现在设备开始发送X byte[]块。 因此,请确保我们以正确的顺序处理数据,并且不会因我添加了HandlerThread的不同线程而陷入混乱:

HandlerThread handlerThread = new HandlerThread("ActionHandlerThread");
      handlerThread.start();
      Looper looper = handlerThread.getLooper();
      mHandler = new Handler(looper);

每次设备发送数据时我都会呼叫

@Override
 public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
    mHandler.post(() -> {
        mListener.onCharacteristicChanged(gatt, characteristic);
        }
    );  
 }

mListener将数据发送给其他类,这些类检查到达的数据类型和期望的数据。 如果我每次调用post()都理解正确,则将新任务添加到处理程序的循环程序中,并应按照与添加它们相同的顺序处理该任务,但是当我在日志中运行该应用程序时,我看到回调已正确触发并发布了)以正确的顺序调用,但随后的处理顺序错误。 例如,应用程序希望接收到确认命令,但是数据已经来了,但这是不可能的,因为数据不能在确认之前来。 我创建HandlerThread的主要原因是确保使用BLE的整个操作将在单个线程上运行,并且不必担心同步问题,但是现在看来我确实存在同步问题。 我是否错过一些逻辑或对HandlerThread的理解。

我仅使用计时器和计数器进行的一些测试,我们可以看到,当间隔短至1 ms时,并非所有任务都打印在帖子中:

5毫秒的间隔:

2019-01-30 21:33:31.531 27991-27991/? D/ThreadTest: Thread before Thread[main,5,main]
2019-01-30 21:33:31.532 27991-28036/? D/ThreadTest: Counter : 1 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.532 27991-28035/? D/ThreadTest: Counter : 1 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.537 27991-28036/? D/ThreadTest: Counter : 2 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.538 27991-28035/? D/ThreadTest: Counter : 2 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.543 27991-28036/? D/ThreadTest: Counter : 3 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.543 27991-28035/? D/ThreadTest: Counter : 3 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.548 27991-28036/? D/ThreadTest: Counter : 4 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.548 27991-28035/? D/ThreadTest: Counter : 4 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.553 27991-28036/? D/ThreadTest: Counter : 5 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.553 27991-28035/? D/ThreadTest: Counter : 5 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.559 27991-28036/? D/ThreadTest: Counter : 6 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.559 27991-28035/? D/ThreadTest: Counter : 6 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.563 27991-28036/? D/ThreadTest: Counter : 7 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.563 27991-28035/? D/ThreadTest: Counter : 7 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.568 27991-28036/? D/ThreadTest: Counter : 8 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.569 27991-28035/? D/ThreadTest: Counter : 8 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.574 27991-28036/? D/ThreadTest: Counter : 9 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.574 27991-28035/? D/ThreadTest: Counter : 9 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.580 27991-28036/? D/ThreadTest: Counter : 10 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.580 27991-28035/? D/ThreadTest: Counter : 10 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.585 27991-28036/? D/ThreadTest: Counter : 11 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.586 27991-28035/? D/ThreadTest: Counter : 11 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.591 27991-28036/? D/ThreadTest: Counter : 12 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.591 27991-28035/? D/ThreadTest: Counter : 12 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.596 27991-28036/? D/ThreadTest: Counter : 13 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.596 27991-28035/? D/ThreadTest: Counter : 13 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.602 27991-28036/? D/ThreadTest: Counter : 14 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.604 27991-28035/? D/ThreadTest: Counter : 14 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.607 27991-28036/? D/ThreadTest: Counter : 15 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.607 27991-28035/? D/ThreadTest: Counter : 15 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.612 27991-28036/? D/ThreadTest: Counter : 16 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.613 27991-28035/? D/ThreadTest: Counter : 16 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.618 27991-28036/? D/ThreadTest: Counter : 17 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.618 27991-28035/? D/ThreadTest: Counter : 17 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.623 27991-28036/? D/ThreadTest: Counter : 18 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.623 27991-28035/? D/ThreadTest: Counter : 18 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.628 27991-28036/? D/ThreadTest: Counter : 19 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.629 27991-28035/? D/ThreadTest: Counter : 19 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.633 27991-28036/? D/ThreadTest: Counter : 20 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.633 27991-28035/? D/ThreadTest: Counter : 20 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.638 27991-28036/? D/ThreadTest: Counter : 21 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.639 27991-28035/? D/ThreadTest: Counter : 21 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.643 27991-28036/? D/ThreadTest: Counter : 22 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.643 27991-28035/? D/ThreadTest: Counter : 22 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.648 27991-28036/? D/ThreadTest: Counter : 23 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.648 27991-28035/? D/ThreadTest: Counter : 23 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.654 27991-28036/? D/ThreadTest: Counter : 24 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.654 27991-28035/? D/ThreadTest: Counter : 24 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.659 27991-28036/? D/ThreadTest: Counter : 25 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.659 27991-28035/? D/ThreadTest: Counter : 25 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.665 27991-28036/? D/ThreadTest: Counter : 26 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.665 27991-28035/? D/ThreadTest: Counter : 26 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.669 27991-28036/? D/ThreadTest: Counter : 27 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.669 27991-28035/? D/ThreadTest: Counter : 27 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.674 27991-28036/? D/ThreadTest: Counter : 28 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.675 27991-28035/? D/ThreadTest: Counter : 28 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.679 27991-28036/? D/ThreadTest: Counter : 29 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.679 27991-28035/? D/ThreadTest: Counter : 29 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.684 27991-28036/? D/ThreadTest: Counter : 30 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.684 27991-28035/? D/ThreadTest: Counter : 30 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.690 27991-28036/? D/ThreadTest: Counter : 31 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.690 27991-28035/? D/ThreadTest: Counter : 31 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.694 27991-28036/? D/ThreadTest: Counter : 32 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.694 27991-28035/? D/ThreadTest: Counter : 32 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.700 27991-28036/? D/ThreadTest: Counter : 33 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.700 27991-28035/? D/ThreadTest: Counter : 33 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.704 27991-28036/? D/ThreadTest: Counter : 34 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.704 27991-28035/? D/ThreadTest: Counter : 34 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.709 27991-28036/? D/ThreadTest: Counter : 35 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.709 27991-28035/? D/ThreadTest: Counter : 35 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.715 27991-28036/? D/ThreadTest: Counter : 36 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.715 27991-28035/? D/ThreadTest: Counter : 36 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.719 27991-28036/? D/ThreadTest: Counter : 37 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.719 27991-28035/? D/ThreadTest: Counter : 37 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.724 27991-28036/? D/ThreadTest: Counter : 38 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.724 27991-28035/? D/ThreadTest: Counter : 38 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.730 27991-28036/? D/ThreadTest: Counter : 39 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.730 27991-28035/? D/ThreadTest: Counter : 39 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.735 27991-28036/? D/ThreadTest: Counter : 40 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.735 27991-28035/? D/ThreadTest: Counter : 40 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.740 27991-28036/? D/ThreadTest: Counter : 41 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.741 27991-28035/? D/ThreadTest: Counter : 41 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.745 27991-28036/? D/ThreadTest: Counter : 42 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.746 27991-28035/? D/ThreadTest: Counter : 42 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.750 27991-28036/? D/ThreadTest: Counter : 43 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.750 27991-28035/? D/ThreadTest: Counter : 43 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.756 27991-28036/? D/ThreadTest: Counter : 44 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.756 27991-28035/? D/ThreadTest: Counter : 44 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.760 27991-28036/? D/ThreadTest: Counter : 45 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.760 27991-28035/? D/ThreadTest: Counter : 45 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.765 27991-28036/? D/ThreadTest: Counter : 46 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.765 27991-28035/? D/ThreadTest: Counter : 46 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.771 27991-28036/? D/ThreadTest: Counter : 47 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.771 27991-28035/? D/ThreadTest: Counter : 47 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.775 27991-28036/? D/ThreadTest: Counter : 48 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.775 27991-28035/? D/ThreadTest: Counter : 48 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.780 27991-28036/? D/ThreadTest: Counter : 49 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.780 27991-28035/? D/ThreadTest: Counter : 49 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:33:31.785 27991-28036/? D/ThreadTest: Counter : 50 , Thread[Timer-0,5,main]
2019-01-30 21:33:31.786 27991-28035/? D/ThreadTest: Counter : 50 , inside post Thread[MyTestThread,5,main]

间隔1毫秒:

2019-01-30 21:32:57.104 27831-27831/? D/ThreadTest: Thread before Thread[main,5,main]
2019-01-30 21:32:57.105 27831-27866/? D/ThreadTest: Counter : 1 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.106 27831-27865/? D/ThreadTest: Counter : 1 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.107 27831-27866/? D/ThreadTest: Counter : 2 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.107 27831-27865/? D/ThreadTest: Counter : 2 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.109 27831-27866/? D/ThreadTest: Counter : 3 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.110 27831-27865/? D/ThreadTest: Counter : 3 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.111 27831-27866/? D/ThreadTest: Counter : 4 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.111 27831-27865/? D/ThreadTest: Counter : 4 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.112 27831-27866/? D/ThreadTest: Counter : 5 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.112 27831-27865/? D/ThreadTest: Counter : 5 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.114 27831-27866/? D/ThreadTest: Counter : 6 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.114 27831-27866/? D/ThreadTest: Counter : 7 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.114 27831-27865/? D/ThreadTest: Counter : 7 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.115 27831-27865/? D/ThreadTest: Counter : 7 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.115 27831-27866/? D/ThreadTest: Counter : 8 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.116 27831-27865/? D/ThreadTest: Counter : 8 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.117 27831-27866/? D/ThreadTest: Counter : 9 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.117 27831-27866/? D/ThreadTest: Counter : 10 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.118 27831-27865/? D/ThreadTest: Counter : 10 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.118 27831-27865/? D/ThreadTest: Counter : 11 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.118 27831-27866/? D/ThreadTest: Counter : 11 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.118 27831-27865/? D/ThreadTest: Counter : 11 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.120 27831-27866/? D/ThreadTest: Counter : 12 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.120 27831-27865/? D/ThreadTest: Counter : 12 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.121 27831-27866/? D/ThreadTest: Counter : 13 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.122 27831-27865/? D/ThreadTest: Counter : 13 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.122 27831-27866/? D/ThreadTest: Counter : 14 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.123 27831-27865/? D/ThreadTest: Counter : 14 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.124 27831-27866/? D/ThreadTest: Counter : 15 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.125 27831-27865/? D/ThreadTest: Counter : 15 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.125 27831-27866/? D/ThreadTest: Counter : 16 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.126 27831-27865/? D/ThreadTest: Counter : 16 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.127 27831-27866/? D/ThreadTest: Counter : 17 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.127 27831-27866/? D/ThreadTest: Counter : 18 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.127 27831-27865/? D/ThreadTest: Counter : 18 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.128 27831-27865/? D/ThreadTest: Counter : 18 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.129 27831-27866/? D/ThreadTest: Counter : 19 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.129 27831-27866/? D/ThreadTest: Counter : 20 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.129 27831-27865/? D/ThreadTest: Counter : 20 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.129 27831-27865/? D/ThreadTest: Counter : 20 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.130 27831-27866/? D/ThreadTest: Counter : 21 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.130 27831-27865/? D/ThreadTest: Counter : 21 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.131 27831-27866/? D/ThreadTest: Counter : 22 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.131 27831-27865/? D/ThreadTest: Counter : 22 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.132 27831-27866/? D/ThreadTest: Counter : 23 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.133 27831-27866/? D/ThreadTest: Counter : 24 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.133 27831-27865/? D/ThreadTest: Counter : 24 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.133 27831-27865/? D/ThreadTest: Counter : 24 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.134 27831-27866/? D/ThreadTest: Counter : 25 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.134 27831-27865/? D/ThreadTest: Counter : 25 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.135 27831-27866/? D/ThreadTest: Counter : 26 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.135 27831-27865/? D/ThreadTest: Counter : 26 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.136 27831-27866/? D/ThreadTest: Counter : 27 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.136 27831-27865/? D/ThreadTest: Counter : 27 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.138 27831-27866/? D/ThreadTest: Counter : 28 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.138 27831-27865/? D/ThreadTest: Counter : 28 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.139 27831-27866/? D/ThreadTest: Counter : 29 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.139 27831-27865/? D/ThreadTest: Counter : 29 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.140 27831-27866/? D/ThreadTest: Counter : 30 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.140 27831-27865/? D/ThreadTest: Counter : 30 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.142 27831-27866/? D/ThreadTest: Counter : 31 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.142 27831-27865/? D/ThreadTest: Counter : 31 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.143 27831-27866/? D/ThreadTest: Counter : 32 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.143 27831-27865/? D/ThreadTest: Counter : 32 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.144 27831-27866/? D/ThreadTest: Counter : 33 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.145 27831-27865/? D/ThreadTest: Counter : 33 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.146 27831-27866/? D/ThreadTest: Counter : 34 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.146 27831-27865/? D/ThreadTest: Counter : 34 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.147 27831-27866/? D/ThreadTest: Counter : 35 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.147 27831-27865/? D/ThreadTest: Counter : 35 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.148 27831-27866/? D/ThreadTest: Counter : 36 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.148 27831-27865/? D/ThreadTest: Counter : 36 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.150 27831-27866/? D/ThreadTest: Counter : 37 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.150 27831-27866/? D/ThreadTest: Counter : 38 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.150 27831-27865/? D/ThreadTest: Counter : 38 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.150 27831-27865/? D/ThreadTest: Counter : 38 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.151 27831-27866/? D/ThreadTest: Counter : 39 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.151 27831-27865/? D/ThreadTest: Counter : 39 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.152 27831-27866/? D/ThreadTest: Counter : 40 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.152 27831-27865/? D/ThreadTest: Counter : 40 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.153 27831-27866/? D/ThreadTest: Counter : 41 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.154 27831-27866/? D/ThreadTest: Counter : 42 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.154 27831-27865/? D/ThreadTest: Counter : 42 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.154 27831-27865/? D/ThreadTest: Counter : 42 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.155 27831-27866/? D/ThreadTest: Counter : 43 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.155 27831-27865/? D/ThreadTest: Counter : 43 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.156 27831-27866/? D/ThreadTest: Counter : 44 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.156 27831-27865/? D/ThreadTest: Counter : 44 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.157 27831-27866/? D/ThreadTest: Counter : 45 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.158 27831-27865/? D/ThreadTest: Counter : 45 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.159 27831-27866/? D/ThreadTest: Counter : 46 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.159 27831-27865/? D/ThreadTest: Counter : 46 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.160 27831-27866/? D/ThreadTest: Counter : 47 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.160 27831-27865/? D/ThreadTest: Counter : 47 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.161 27831-27866/? D/ThreadTest: Counter : 48 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.161 27831-27865/? D/ThreadTest: Counter : 48 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.163 27831-27866/? D/ThreadTest: Counter : 49 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.163 27831-27866/? D/ThreadTest: Counter : 50 , Thread[Timer-0,5,main]
2019-01-30 21:32:57.163 27831-27865/? D/ThreadTest: Counter : 50 , inside post Thread[MyTestThread,5,main]
2019-01-30 21:32:57.163 27831-27865/? D/ThreadTest: Counter : 50 , inside post Thread[MyTestThread,5,main]

测试代码:

private fun handlerThreadTest() {
    val handlerThread = HandlerThread("MyTestThread")
    handlerThread.start()

    val handler = Handler(handlerThread.looper)

    Log.d("ThreadTest", "Thread before ${Thread.currentThread()}")
    var i = 0
    val timerObj = Timer()
    val timerTaskObj = object : TimerTask() {
      override fun run() {
        i++
        //perform your action here
        Log.d("ThreadTest", "Counter : $i , ${Thread.currentThread()}")
        handler.post {
          Log.d("ThreadTest", "Counter : $i , inside post ${Thread.currentThread()}")
          if (i == 50)
            timerObj.cancel()
        }
      }
    }

    timerObj.schedule(timerTaskObj, 0, 5)

  }

1 个答案:

答案 0 :(得分:1)

您的代码中有错误。在发布Runnable之前,需要从特性中提取值。否则,当Runnable稍后运行并提取值时,它将是最新的。

在Chromium中实施Web蓝牙时犯了同样的错误。参见https://bugs.chromium.org/p/chromium/issues/detail?id=647673&desc=2

还要注意,在较新的Android版本中,您可以直接在connectGatt中设置处理程序。

相关问题