我有Android应用程序,在服务启动工具上跟着代码:
...
Process process = Runtime.getRuntime().exec("logcat -v time -s " + arg);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
...
如您所见,我启动logcat进程来监听日志。 不幸的是,停止服务不会停止logcat,并且在几次启动后我得到:
app_125 4782 144 137124 30584 ffffffff 00000000 S com.wefi.agnt.ui
app_125 4796 4782 1028 592 ffffffff 00000000 S logcat
app_125 4839 4782 1076 640 ffffffff 00000000 S logcat
app_125 4842 4782 952 516 ffffffff 00000000 S logcat
app_125 4845 4782 896 460 ffffffff 00000000 S logcat
app_125 4848 4782 900 464 ffffffff 00000000 S logcat
app_125 4851 4782 876 440 ffffffff 00000000 S logcat
shell 4852 171 788 336 c00cc7e4 afd0c78c S /system/bin/sh
shell 4853 4852 944 332 00000000 afd0b83c R ps
app_123 11189 144 114484 18908 ffffffff 00000000 S com.mspot.android.moviesClub.att
... logcat进程列表。我怎么能杀了他们?
任何想法
答案 0 :(得分:2)
由于您拥有Process
实例的句柄,因此您可以在停止服务时使用process.destroy()
。 Logcat进程独立于您的应用程序运行,因此它们将在您的应用程序Service
停止运行后继续运行,除非您终止它们。
如果您只是想在测试应用时清理设备上的进程,可以运行adb shell
在设备上获取shell提示符,然后使用kill <PID>
终止进程。
修改强>:
Process
文档还指定您应使用ProcessBuilder
来设置和运行该过程:
ProcessBuilder pb = new ProcessBuilder("logcat", "-v", "time", "-s", arg);
pb.redirectErrorStream(true);
Process process = pb.start();
...
答案 1 :(得分:2)
首先启动adb日志记录,创建一个进程:
String cmd1 = "logcat -v time -f" + filename.getAbsolutePath();
Process logcat = Runtime.getRuntime().exec(cmd1);
在此之后,无论何时想要停止adb更新以写入文件,都可以简单地调用:
String cmd = "logcat -c";
try {
logcat.destroy();
logcat = Runtime.getRuntime().exec(cmd);
} catch (IOException e) {
e.printStackTrace();
}
这将破坏先前的构建过程并清除所有先前记录的adb日志。因此,再次开始adb日志记录的时间,它将从同一时间开始,而不添加先前日志中的重复值。