Android - 如何在记录I / O事务时保持正确的事件排序?

时间:2014-06-06 02:16:16

标签: android multithreading io

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

从平板电脑输入的每个命令行都应该返回一个确认(结果+" - 确定!"如果好,或者如果没有则输出错误消息。如果从一行输入一行,则没有问题键盘,或者如果使用单行文件。如果我使用多行文件,每行都是单独发送的,我希望在命令行后立即看到终端上显示的对该行的响应 - 这样任何错误等与相关命令相关联。

例如,

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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