Android USB 配件多线程

2024-03-16

我遇到了由多线程和 Android Open Accessory 引起的问题。

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

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

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

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

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

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

  • 我尝试过获得FileDescriptor来自USBAccessory并传递到JNI在那里处理它,但在第一次读/写后,设备变得无法访问。

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

澄清:
另一端的软件可能会也可能不会响应任何数据。有一些所谓的静默发送,即发送的数据刚刚收到,但没有 ACK。由于我正在开发的应用程序只是一个代理,因此我不清楚数据是否会产生答案。这还需要对数据进行分析,而目前这些数据还没有记录在案。


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

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

这会

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

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android USB 配件多线程 的相关文章

  • 如何从 Android 应用程序调试共享库 [单独的项目]

    我正在开发一个 Android 应用程序并在项目中使用密集的 C 代码 首先 我将c 源代码放入项目中 并使用以下指南在Android应用程序中具有本机调试的NDK功能 http tools android com recent using
  • swing - 在 JPanel 上单击组件

    好的 我有一个带有 GridLayout 的 JPanel 网格的每个单元格都包含另一个 JPanel 我希望能够做的是在 下方 JPanel 上有一个侦听器 然后它告诉我单击了哪个 覆盖 JPanel 这样我就可以对它和周围的 JPane
  • RecyclerView onItemClickListener 不工作

    我正在研究回收视图并尝试对 recyclerview 的每个项目使用点击侦听器界面 这是我的活动课程 public class LegacyHomeActivity extends ActivityBaseDrawer private Li
  • Android-如何在指定时间后台下载数据

    我提前很抱歉没有发布任何代码 主要是因为我一生都无法弄清楚我需要如何做我需要做的事情 基本上 在一天中的指定时间间隔 例如下午 5 点 我希望我的应用程序从我的服务器下载一些数据并将其存储在设备上 这是为了减少每次运行应用程序时下载数据对我
  • 如何在使用 Web 服务时获取会话对象?

    如何在使用 Web 服务时获取会话对象 服务在两个程序之间调用 如何在使用 Web 服务时获取用户会话对象 不可能使用请求对象获取会话 因为当我们谈论服务时不会有请求或响应 如果您正在与JAX WS https jax ws dev jav
  • 如何从代码中检测 Android 设备上的双核 cpu?

    我遇到了一个似乎仅影响双核的问题Android设备运行Android 2 3 姜饼 或更大 我想就这个问题进行一次对话 但仅限于符合该标准的用户 我知道如何检查OS级别 但还没有找到任何可以明确告诉我该设备正在使用多核的信息 有任何想法吗
  • Android 基础知识:在 UI 线程中运行代码

    从在 UI 线程中运行代码的角度来看 以下两者之间有什么区别 MainActivity this runOnUiThread new Runnable public void run Log d UI thread I am the UI
  • 如何执行graph-api Facebook Android SDK来上传照片并标记人物?

    如何执行graph api Facebook Android SDK来上传照片并标记人物 在网络上 对于 Android 版 facebook sdk 有很多混淆 我的第一个方法 Bitmap img bitmap if img null
  • 使 @Schedule 在集群环境中仅运行一次

    我有两个 tomee 实例集群 每个都有一个方法注释如下 Schedule dayOfWeek public void runMeDaily 我只想每天运行一次这个方法 每天不两次 每个实例一次 我可以使用此处描述的标志仅在一个WebLog
  • 将文件内容存储到数组中

    我的刽子手程序有问题 我真的认为我需要做的事情超出了我对java的理解 这是我的代码 import java io BufferedReader import java io FileReader import java io FileNo
  • JavaFX:在 WebView img 标签中未加载本地图像

    以下是我的代码 一切安好 我可以加载远程页面 我可以放置 HTML 内容 但我的img标签显示一个X标志表示无法加载图像 Note 我的图像与类位于同一个包中JavaFX在 Smiley 文件夹中 我可以列出所有图像 这意味着路径没有问题
  • 寻找自定义 SynchronizationContext 的示例(单元测试所需)

    我需要定制同步上下文 http msdn microsoft com en us library system threading synchronizationcontext aspx that 拥有一个运行 Posts 和 Sends
  • XML 渲染错误 Android 预览 N

    更新后我已将 android SDK 更新为 android Preview N 但收到此 xml 渲染错误 单击详细信息后 它显示以下堆栈跟踪如何避免这种情况 org jetbrains android uipreview Renderi
  • 从子线程绘制到窗口

    我的应用程序从工作线程绘制图形已有 10 多年了 而且我从未遇到过任何问题 工作线程吸引到我的HWND 由主线程创建 如下所示 hdc GetDC hwnd SetDIBitsToDevice or StretchDIBits Releas
  • 如何处理 Android M 中广播接收器权限的删除?

    我有一些遗留代码 我正在为棉花糖提供安全许可 有一个使用PHONE STATE权限的广播如下
  • javaFX,抛出 NullPointerException,位置是必需的

    我看过其他答案 但没有任何帮助我 抱歉 GUI新手只知道swing的基础知识 这是主课 package application import javafx application Application import javafx fxml
  • 如何解决“布局有超过 80 个视图,对性能不利”?

    我正在做一个有点复杂的布局 只是我无法修复 LINT 指示的错误 黑莓浏览次数超过 80 对性能不利 这是布局
  • 设置滚动条粗细

    有没有办法调整滚动条的粗细JScrollPane 默认值有点笨拙 一个快速但又肮脏的解决方案是将宽度 高度明确设置为例如10 像素通过 jScrollPane getVerticalScrollBar setPreferredSize ne
  • 如果 windowTranslucentStatus 为 false,则不会调用键盘的 onApplyWindowInsets

    正如标题所说 我有一个Activity我想在其上处理键盘的插入 底部有一个视图 不应该推上去 但其余的观点应该被推高 我可以使用很好地处理插图onApplyWindowInsets IF windowTranslucentStatus设置为
  • 为什么 JDOM 的 getChild() 方法返回 null?

    我正在做一个关于 html 文档操作的项目 我想要现有 html 文档中的正文内容将其修改为新的 html 现在我正在使用 JDOM 我想在我的编码中使用 body 元素 为此 我在编码中使用了 getChild body 但它向我的程序返

随机推荐

  • 显式 int 类型作为参数

    是否可以将函数写为 void func uint64 t val template
  • 如何使用 jQuery 设置动态文本框的只读属性?

    我正在尝试从数据库值填充文本框 并且我想将文本框值设置为只读 当用户单击 编辑 选项时 将所有文本框设置为可编辑 我没能做到这一点 这是我的 HTML 代码
  • 使用 Immutable 对普通对象进行深度访问

    考虑以下示例 const stickers new OrderedMap set 1 hero batman name Bruce stickers getIn 1 gt hero batman name Bruce stickers ge
  • REST 服务返回错误的内容类型并解组

    我正在使用 RESTEasy 更具体地说 是他们框架的客户端 我正在调用第三方 Web 服务 它会返回一些 JSON 代码 但是 出于某些充分的原因 他们响应中的内容类型是 text javascript 我如何告诉 RESTEasy 它应
  • 带撇号的单词的正则表达式 (Java)

    我正在尝试找出正则表达式来匹配仅包含字母和撇号的字符串 如果一个字符串包含撇号 我只想匹配它两边都有一个字母 到目前为止我所拥有的是 a zA Z a zA Z 我想匹配如下字符串 a a aa a a aaa But not bb bb
  • 将 Service Fabric 应用程序发布到 Azure 时操作超时

    当我尝试将 Service Fabric 应用程序发布到 Azure 群集时 收到以下错误消息 3 gt Copy ServiceFabricApplicationPackage Operation timed out 3 gt At C
  • Mongodb concat int 和 string

    我正在尝试为我的集合中大小为 50 mb 及以上的所有文件投影 FileName 和 FileSize 但我无法连接 FileSize 类型 因为它的类型为 Int 我希望投影是 result id ObjectId 5652c399a21
  • 将 Python Keras NLP 模型转换为 Tensorflowjs

    我正在尝试了解有关 Tensorflowjs 的更多信息 但遗憾的是我无法将 Keras NLP 模型转换为 Tensorflowjs 这就是我想要转换的 from keras models import load model from k
  • Jqgrid 页脚文本格式问题

    在 Jqgrid 中 我已将某些列设置为链接 对于这些列 我还设置了页脚 MAX 但问题是 配置的链接也被添加到页脚值中 这是意料之外的 任何帮助表示赞赏 提前致谢 我认为问题是how您添加页脚信息 如果你使用页脚数据 http www t
  • 无法将文件从 DBFS 复制到 Databricks 中的本地桌面

    我想将文件从 dbfs 保存或复制到我的桌面 本地 我使用此命令但收到错误 dbutils fs cp dbfs username test txt C Users username Desktop Error SyntaxError un
  • 有没有办法通过 Express + Node.js 使用多个视图引擎

    Scenario 我使用开发了一些交易页面Node js http nodejs org Express http expressjs com 车把 http handlebarsjs com 作为视图引擎和MongoDB http www
  • 更新对象属性

    我正在使用 Struts 2 我的问题是我不想更新所有对象属性 因为我得到了一些敏感数据 这是我的代码示例 public class person private name private email private password 例如
  • for 循环的简写是否缓存可迭代对象的引用?

    我可能试图变得过于高效 但我一直想知道以下两个代码示例中哪一个会执行得更快 假设您有一个对包含以下内容的对象的引用ArrayList of Strings并且您想要迭代该列表 以下哪项更有效 即使效率有限 for String s foo
  • Objective-C 结构体的默认值以及如何测试

    我正在尝试测试属性是否已设置 我知道我拥有的对象 CGRect ppGoalFrame LocalPlaySetup localPlaySetup 我可以测试 if localPlaySetup nil 但如果我尝试用 nil 或 NULL
  • 实体框架如何决定是引用现有对象还是创建新对象?

    只是出于我的好奇心 以及未来的知识 Entity Framework 5 如何决定何时创建新对象与引用现有对象 我可能只是做错了什么 但似乎时不时地 如果我做一些类似的事情 using TestDB db new TestDB var cu
  • jruby - ruby​​ lambda 语法 -> 不是一个重要的考虑因素吗?

    我注意到 即使在最新的 1 6 4 jruby 版本中 也不支持 Ruby 1 9 中的新 lambda 语法 gt 所以 我猜测这种语法在 ruby 社区中并不常用 是因为语法是新的还是有其他缺点 x gt y y 1 x call 2
  • Python - 从不断变化的文本文件中实时更新图形

    我有一个线程每 2 秒连续写入一个文本文件 Matplotlib 图 实时更新图 引用同一文件 因此 当我启动脚本时 我打开一个图表并在线程上启动文件写入过程 文件正在更新 但我的图表没有更新 只有在文件写入完成后 文件上的数据才会显示在图
  • Visual Studio 2017 Update 3 - 找不到指定的 SDK“Microsoft.NET.Sdk.Web”

    Error C WebApp WebApp csproj 错误 找不到指定的 SDK Microsoft NET Sdk Web C WebApp WebApp csproj 我正在尝试打开 Dotnet 核心项目 但收到上述错误 我已经安
  • 数据库理论-两个表之间的关系

    我有一个包含两个表的数据库 让我们称它们为 Foo 和 Bar 每个 foo 可以与任意数量的 bar 相关 每个 bar 也可以与任意数量的 foo 相关 我希望能够通过一个查询检索与特定 bar 关联的 foo 以及与特定 foo 关联
  • Android USB 配件多线程

    我遇到了由多线程和 Android Open Accessory 引起的问题 我需要与 USB 附件通信 但我需要从 2 个线程进行通信 一个线程生成并发送数据 另一个线程读取数据 为什么我不使用单线程 因为在读取之前可能有 1 次或多次写