【问题标题】:Android - How do I maintain the correct event sequencing in recording an I/O transaction?Android - 如何在记录 I/O 事务时保持正确的事件顺序?
【发布时间】:2023-04-03 11:37:02
【问题描述】:

我有一个程序允许 Android 平板电脑(Nexus 7 2012 和三星 Galaxy 10.1)与 PIC 上的 Forth 系统进行交互。两者之间的通信是通过蓝牙使用蓝牙服务示例应用程序的变体进行的。基本安排是有效的,但我已将其扩展为访问平板电脑上保存为文本文件的命令。文件可能包含多行代码。应用程序结构是一个主要活动,它简单地提供对各种片段的访问 - 特别是 TerminalFragment 用于使用带有 TextView 的软键盘输入命令字符串以显示命令和回复。蓝牙通信是通过一个单独的类 BtService 在它自己的文件中,通过一个单独的 FileListActivity 处理文件。

从数位板输入的每个命令行都应该返回一个确认(结果+“- ok!”如果好,或者错误消息,如果不是。如果从键盘输入单行,或者如果使用单行文件。如果我使用多行文件,则每一行都是单独发送的,我希望在命令行之后立即在终端上看到对该行的响应 - 这样任何错误等都与相关命令。

例如,

1 2 + U.     (command)
3            (result) 
-ok!         (acknowledgement) 

但是,显示将文件中的所有命令显示为一个块,然后是响应,也作为一个块:

1 2 + U.
3 4 + U.
5 6 + U.
3
- ok!
7
- ok!
B
- ok!

Logcat 显示对每个命令行的响应会在它被发送后立即被接收,并且在下一个命令行被传输之前。回复通过消息处理程序转发到主活动。但是,主要活动不会立即处理这些消息,而是在文件中的所有行都已发送并确认之后。

由于我对消息服务和目标活动之间的交互细节知之甚少,任何人都可以解释发生了什么以及是否有一个简单的修复可以让我做我想做的事?我曾尝试使用一个标志来推迟发送线路命令,直到收到最后一个确认,但如果目标设备没有反应,这可能会导致锁定 - 这很可能在最终应用程序中。

【问题讨论】:

    标签: android multithreading io


    【解决方案1】:

    我设法找到了获得我想要的东西的方法。通过将所有事务以正确的顺序放入消息队列系统,最终以相同的顺序处理它们。

    但是我必须通过我的“终端”片段输入一行文本,将其传递给主要活动,然后传递给蓝牙服务。从这里它作为消息传递回主要活动,然后最终返回终端片段进行显示 - 似乎有点迂回!

    【讨论】:

      猜你喜欢
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2011-10-26
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      相关资源
      最近更新 更多