Android USB配件多线程

时间:2018-06-14 19:14:52

标签: java android multithreading

multi-threadingAndroid Open Accessory引起的头痛。

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

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

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

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

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

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

  • 我尝试从FileDescriptor获取USBAccessory并传递给JNI来处理它,但在第一次读/写后,设备无法访问。

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

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

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您想并行读写,如果读取与写入位于同一部分,则写入将始终导致暂停读取。

可能您可以遵循与public boolean clickLogin(email, password){ setUserName("user"); setPassword("admin123"); //do some assert, return result Assert.assertTrue(); // if it fails, You wont be able to execute any further. // or have some kind of check and return boolean return true; } 类似的方法,并对不同的段使用不同的锁,并且如果write在同一段上则锁定只读,否则允许读取发生。

这将

  1. 在大多数情况下,避免在写入期间阻止读取
  2. 避免碰撞和
  3. 绝对不会是单线程方法。
  4. 希望有所帮助。

答案 1 :(得分:0)

  

如果使用多个线程,我确实遇到了I / O错误(没有这样的设备)   或迟或早,因为我会在读写之间发生冲突   同时执行。

这说明了一切。由于您正在不支持并发访问的同一通道上进行读写,因此您需要让您的线程等待,直到另一个线程完成了读/写操作。

您将或多或少地采用两线程方法。祝你好运,并信任自己。