我们的 Android 应用会生成一个 logcat shell 进程,然后读取其结果进行处理。但是,当应用程序停止时(例如,在开发过程中重新编译后重新启动时),logcat 进程将继续运行。这是此行为的示例:
processes = new ArrayList<Process>();
try {
processes.add(Runtime.getRuntime().exec("logcat -v time"));
processes.add(Runtime.getRuntime().exec("logcat -v time"));
processes.add(Runtime.getRuntime().exec("logcat -v time"));
processes.add(Runtime.getRuntime().exec("logcat -v time"));
} catch (IOException e) {
// oh no!
}
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
for (Process p : processes) {
p.destroy();
}
};
});
将此添加到测试应用程序的 onCreate() 方法中,启动它,然后使用设置管理器强制停止它。子进程将继续运行,现在其父 ID 为 1。
在如何杀死 Android 应用程序启动的 logcat 进程?有人建议使用 ProcessBuilder,但这不是一个解决方案,该过程也将继续运行。
在父进程停止时停止子进程中,建议使用关闭挂钩 - 如上所示,这也不起作用。
谢谢!