Android USB配件多线程

Emi*_*oni 10 java multithreading android

multi-threading和引起的头痛Android Open Accessory.

我需要与USB附件进行通信,但我需要从2个线程进行.一个线程生成并发送数据,另一个线程读取数据.

  • 为什么我不使用单个线程?因为在读取和读取之前可以有1个或更多写入阻塞,所以这不是一个选项.

  • 如果使用多个线程,我I/O Error (No such device)迟早会遇到,因为我会在读取和写入同时执行时发生冲突.

  • 锁定会或多或少地让我回到单线程的情况,所以不好.

  • .available()input-stream不支持返回的方法,因此在执行读操作之前无法检查是否有任何可用的内容

  • 由于它不是基于套接字的流,我也无法设置超时.

  • 我已经尝试FileDescriptor从那里获取USBAccessory并传递到JNI处理它,但在第一次读/写后,设备变得无法访问.

问题/建议:
对此建议/最佳实践方法是什么?我不希望编写代码,我只需要一些如何解决这个问题的指导.

澄清:
另一端的软件可能会或可能不会响应任何数据.有一些所谓的静默发送是刚刚收到的数据,但是没有ACK.由于我正在处理的应用程序只是一个代理,如果数据将会或不会产生答案,我没有清晰的图片.这也需要对数据进行分析,目前这些数据尚未出现.

谢谢.

Ama*_*bra 1

当您想要并行进行读取和写入时,如果读取与写入位于同一部分,则写入总是会导致读取暂停。

也许您可以遵循类似的方法,ConcurrentHashMap对不同的段使用不同的锁,并且仅当写入位于同一段上时才锁定读取,否则允许读取发生。

这会

  1. 大多数情况下避免写入期间阻塞读
  2. 避免碰撞和
  3. 绝对不会是单线程方法。

希望有帮助。