【发布时间】:2019-06-23 22:49:40
【问题描述】:
我正在开发与蓝牙 BLE 设备通信的 android 应用程序(使用为我们的产品专门开发的自定义协议)。
连接到设备后,我有回调public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic)
每次设备要向我发送数据时都会触发它。
在应用程序架构中,我们有动作(例如getDeviceStatus()),协议以下列方式工作:电话连接到设备-> 握手-> 发送命令(作为字节)-> 设备响应命令(ok/not ok)- > 现在设备开始发送 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() 时都理解正确,则将新任务添加到处理程序的循环器中,并且应该以与添加它们相同的顺序处理任务,但是当我在日志中运行应用程序时,我看到回调正确触发并发布( ) 以正确的顺序调用,但后来的处理以错误的顺序发生。
例如,应用程序希望收到确认命令,但数据已经到来,但这是不可能的,因为数据不能在 acknowledgment 之前到来。
我创建 HandlerThread 的主要原因是确保使用 BLE 的整个操作将在单线程上运行并且不用担心同步问题,但现在看起来我确实有同步问题。
我是否错过了对 HandlerThread 工作的一些逻辑或理解。
我仅使用计时器和计数器进行了一些测试,我们可以看到,当间隔小至 1 毫秒时,并非所有任务都打印在帖子中:
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)
}
【问题讨论】:
-
嗯...你是怎么让
onCharacteristicChanged()编译而没有gatt/characteristic被声明为final的? -
我理解你的问题,但它没有显示任何编译错误,可能是因为我使用了 lambdas?但这不是导致处理程序问题的问题。我做了一个迷你项目来测试处理程序,我看到奇怪的事情看起来像更新之间的间隔小于 4 毫秒处理程序省略了一些发布给他的任务。我不知道这是一个错误还是这是常规行为。
-
"省略了一些任务..." 不,这当然不是常规行为。这就是为什么我对你的变量声明持怀疑态度;我想验证您用来确定
Runnable正在运行的技术是否完全有效。在这方面仍然没有信心。如果你在Runnable里面放一个System.out.println("Run! " + this),你观察到一些没有被打印?你能提供一个 logcat 来演示这种行为吗? -
我添加了我所做的测试,您可以看到当间隔为 1 毫秒时,处理程序会跳过一些打印。
-
不完全...你可能只有一个 9,但你有三个 11。与 19 和 20 等相同。
标签: android bluetooth-lowenergy threadpool handler