Java 线程没有运行完成,为什么?

标签 java android multithreading process adb

我有一个 Runnable,通过在其运行方法中执行以下操作,将数据(几百个文件)从 Android 设备传输到 PC

  1. 使用 Runtime.exec(CMD) 创建进程并执行命令
  2. 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/

相关文章:

java - 使用 Spock 的 Groovy 模拟文件工厂

java - 抑制方法的 "unused"警告,但不抑制其中的变量

java - 为什么 string.indexOf 方法的参数在 Java 中是一个 int

android - GCM - 不清楚应用程序更新的工作原理?

Java 发生在关系 invokeAndWait 之前

java - Google Apps Admin Java API 中的批处理操作

android - 从另一个 Activity Android 中删除短信

java - 将对话消息/标题移至右侧

ios - 传递给 dispatch_async 时, block 中的消息参数是否保留?

java - 尽管可读,选择器仍不活动