我有一个 Runnable,通过在其运行方法中执行以下操作,将数据(几百个文件)从 Android 设备传输到 PC
- 使用 Runtime.exec(CMD) 创建进程并执行命令
- CMD 是将数据从设备传输到运行该线程的 PC 的命令。 (这是适用于 android 的 adb pull 命令)
我有一个主程序,它创建一个线程并启动这个可运行程序。可运行程序开始运行,它执行“adb pull”命令并开始传输数据,但它似乎在完成完整传输之前不久就暂停了。如果我强制退出主程序,传输就会完成。
如果我从主程序本身执行命令而不使用另一个线程,我不会遇到任何问题。
为什么我会遇到这个问题?
最佳答案
您需要使用命令的输出。
这个问题展示了如何使用 shell 脚本而不是代码中的输出:Java ProcessBuilder: Resultant Process Hangs 。
如果您想在 Java 代码中使用输出,基本上您将从 Process.InputStream 提供的 InputStream 中读取。
Process process = Runtime.exec(CMD);
InputStream in = process.getInputStream();
// Repeatedly read from the input stream until eof.
这会阻塞,直到其他进程完成。如果您想要并发,您可以在另一个线程中读取输出。
关于Java 线程没有运行完成,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5023361/