2015-04-03 107 views
0

在我的uiautomator脚本中,我将发送一些临时状态。当我使用adb从命令提示符运行uiautomator时,我可以一次看到我的状态打印输出。但是当我用下面的代码片段运行它时,我一次没有得到它。测试结束后,我只能一次性获得大部分状态。我需要实时获取状态以进行一些解析。在Runtime.getRuntime()中运行uiautomator exec()不给出实时状态

它看起来像输出缓冲和立即刷新。我试图改变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 
} 
+0

你试图从你的应用程序运行它? – 2015-04-04 04:03:18

+0

是的。你可以忽略关于超级用户或设备生根的问题。这在我的情况下不是一个概率。 – 2015-04-05 13:24:48

回答

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(); 

从文档:

导致如果需要,当前线程等待,直到通过此处理对象表示的进程 已终止。如果子进程已经终止,则此方法立即返回 。如果 子流程尚未终止,则调用线程将被阻止 ,直到子流程退出。

相关问题