java 连android设备执行adb命令中断返回流阻塞,Android通过Runtime.getRuntime().exec实现Ping和Traceroute命令时readLine阻塞问题解决...
时间: 2023-12-10 15:40:04 浏览: 233
这个问题可能是由于读取命令执行的输出流时没有正确处理流中的数据而导致的。当命令执行输出大量数据时,流可能会被阻塞,因为它需要等待数据被读取。为了解决这个问题,可以使用多线程来读取输出流,并在另一个线程中等待命令执行完成。以下是一个示例代码:
```java
Process process = Runtime.getRuntime().exec("adb shell command");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
// do something with the output
}
process.waitFor();
```
在这个示例中,我们使用 `BufferedReader` 来读取命令执行的输出流,并在一个循环中等待数据被读取。为了防止阻塞,可以将读取输出流的操作放在一个单独的线程中,并在另一个线程中等待命令执行完成。在等待命令执行完成时,可以调用 `process.waitFor()` 方法来等待命令执行完成。这样可以确保在命令执行完成后再关闭流,避免流被阻塞。
对于 `Ping` 和 `Traceroute` 命令,可以将命令的执行结果输出到一个文件中,然后读取文件中的内容。这样可以避免大量输出阻塞流的问题。另外,也可以使用 `-c` 参数来指定 `Ping` 命令的执行次数,以减少输出的数据量。
阅读全文