Java 为什么我的Android运行时进程有时挂起在waitFor()?

Java 为什么我的Android运行时进程有时挂起在waitFor()?,java,android,process,network-programming,runtime.exec,Java,Android,Process,Network Programming,Runtime.exec,我正在使用进程ping网络上的计算机。(这是我正在开发的android应用程序) 调用此方法并根据进程提供的exitValue确定ping是否成功。对于我测试过这个pingHost()方法的网络上的大多数主机,我确实会得到一个退出值,并用适当的消息进行响应。(ping成功/ping失败)。但在我的网络上有一个特定的主机,exitValue永远不会返回。为什么会发生这种情况 我发现有人遇到过类似的问题,但提供给他们的解决方案对我没有帮助。进程仍然挂起。没有提供任何错误。有什么建议吗 我已尝试添加在

我正在使用进程ping网络上的计算机。(这是我正在开发的android应用程序)

调用此方法并根据进程提供的exitValue确定ping是否成功。对于我测试过这个pingHost()方法的网络上的大多数主机,我确实会得到一个退出值,并用适当的消息进行响应。(ping成功/ping失败)。但在我的网络上有一个特定的主机,exitValue永远不会返回。为什么会发生这种情况

我发现有人遇到过类似的问题,但提供给他们的解决方案对我没有帮助。进程仍然挂起。没有提供任何错误。有什么建议吗

我已尝试添加在调用waitFor()之前启动的线程。。。线程休眠3秒钟,然后销毁进程,但这没有帮助。有没有别的问题我没有想到

显然,Java 8中添加了一个新的waitFor()方法,该方法允许超时参数。。。我的IDE设置为使用jdk1.8.0_65,但我无法使用此方法。有什么我忘记做的吗?

要回答在网络中“ping”机器的问题,您可以使用:

InetAddress.getByName(host).isReachable(timeout)
文件:

尝试访问此
InetAddress
。此方法首先尝试使用ICMP(ICMP回显请求),返回到远程主机端口7(回显)上的TCP连接


此函数将尝试ping主机,并返回正/负结果。好的方面是,这将处理大多数Linux/Windows/Android设备“引擎盖下”的任何东西。即使您没有访问ping二进制文件的权限,或者该二进制文件位于设备的其他位置,即使二进制文件的路径未设置。

是否尝试调试应用程序以查看进程挂起在哪一行?从您的代码中,只有在进程实际完成后(由于之前的循环),才会执行
proc.waitFor()
语句。此外,您不能使用Java8API,因为android还不支持java8。。。
InetAddress.getByName(host).isReachable(timeout)