在Runtime.getRuntime()中运行uiautomator.exec()不提供实时状态

时间:2015-04-03 11:55:52

标签: android runtime.exec uiautomator android-uiautomator

在我的uiautomator脚本中,我将发送一些临时状态。当我使用adb从命令提示符运行uiautomator时,我可以看到我的状态一次打印一个。但是,当我使用下面的代码片段运行它时,我不会一次得到它。测试结束后,我只会立刻获得整个大块状态。我需要以实时方式获取状态以进行一些解析。

在我看来,输出是一次缓冲和刷新的。我曾尝试更改BufferedReader的缓冲区大小,但仍然无法正常运行从命令提示符运行时的状态。

任何人都有任何想法?

String tempString;
Process process = Runtime.getRuntime().exec("uiautomator runtest DummyUiAutomation.jar -c com.dummy.DummyAutomation#DummyAction");
BufferedReader buffReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((tempString = buffReader.readLine()) != null) {
     //do some parsing
}

1 个答案:

答案 0 :(得分:0)

您是否在阅读完流后尝试使用Process.waitFor()

String tempString;
Process process = Runtime.getRuntime().exec("uiautomator runtest DummyUiAutomation.jar -c com.dummy.DummyAutomation#DummyAction");
BufferedReader buffReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((tempString = buffReader.readLine()) != null) {
     //do some parsing
}
process.waitFor();

来自docs:

  

如果需要,导致当前线程等待,直到进程   由此Process对象表示已终止。此方法返回   如果子进程已经终止,则立即执行。如果   子进程尚未终止,调用线程将被阻塞   直到子进程退出。