【问题标题】:Run uiautomator in Runtime.getRuntime().exec() does not give real time status在 Runtime.getRuntime().exec() 中运行 uiautomator 不会给出实时状态
【发布时间】:2015-04-03 11:55:52
【问题描述】:

在我的 uiautomator 脚本中,我将发送一些临时状态。当我使用 adb 从命令提示符运行 uiautomator 时,我可以一次看到我的状态打印输出。但是当我使用下面的代码 sn-p 运行它时,我一次没有得到它。我只会在测试完成后一次性获得全部状态。我需要实时获取状态以进行一些解析。

在我看来,输出是一次缓冲和刷新的。我尝试更改 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
}

【问题讨论】:

  • 您正在尝试从您的应用程序中运行它?
  • 是的。您可以忽略有关超级用户或 root 设备的问题。就我而言,这不是问题。

标签: android runtime.exec android-uiautomator


【解决方案1】:

你有没有在读完流后尝试使用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();

来自文档:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    相关资源
    最近更新 更多