Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-如何在记录I/O事务时保持正确的事件顺序?_Android_Multithreading_Io - Fatal编程技术网

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

Android-如何在记录I/O事务时保持正确的事件顺序?,android,multithreading,io,Android,Multithreading,Io,我有一个程序,允许Android平板电脑(Nexus 7 2012和三星Galaxy 10.1)与PIC上的Forth系统交互。两者之间的通信是使用蓝牙服务示例应用程序的变体通过蓝牙进行的。基本的安排是可行的,但我扩展了它,以访问以文本文件形式保存在平板电脑上的命令。文件可能包含多行代码。应用程序结构是一个主要活动,它只提供对各种片段的访问,特别是TerminalFragment,用于使用软键盘(带有文本视图)输入命令字符串,以显示命令和回复。蓝牙通信通过其自身文件中的单独类BtService进

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

从平板电脑输入的每个命令行都应返回确认信息(结果+“-ok!”如果正确,或如果不正确,则显示错误消息。如果从键盘输入单行,或使用单行文件,则不会出现问题。如果使用多行文件,则每行都会单独发送,并且我希望在命令行后立即在终端上显示对该行的响应,以便将任何错误等与h有关命令

比如说,

1 2 + U.     (command)
3            (result) 
-ok!         (acknowledgement) 
但是,显示器会将文件中的所有命令显示为块,后跟响应,也显示为块:

1 2 + U.
3 4 + U.
5 6 + U.
3
- ok!
7
- ok!
B
- ok!
Logcat显示对每个命令行的响应在发送后立即接收,并在下一个命令行被传输之前接收。这些响应通过消息处理程序转发给主活动。但是,主活动不会立即处理这些消息,而只是在文件中的所有行都被发送后处理t和承认


由于我对消息服务和目标活动之间的交互细节了解不多,有人能解释一下发生了什么,以及是否有一个简单的修复程序允许我做我想做的事情吗?我曾尝试使用一个标志延迟发送行命令,直到收到最后一个确认为止,但这可以d如果目标设备没有反应,可能会导致锁定-这可能在最终的应用程序中发生。

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

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