我们的安卓应用程序生成了一个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,但这不是一个解决方案,该进程也将继续运行。
在当父进程停止时停止子进程中建议使用关闭挂钩 - 如上所示,这也不起作用。
谢谢!
new Thread()
中的processes
副本是空的。你是从for
循环内部还是外部记录日志的?你能将processes
标记为易失性,这样线程就不会缓存副本,然后再检查一下吗? - Vikdor