process p = Runtime.getRuntime()。exec()即使在卸载应用程序时也在运行

时间:2011-09-07 08:51:41

标签: android

我在我的申请中发现了非常奇怪的行为。

我的应用程序有一个服务和一个活动,在我的应用程序的服务部分中,我需要执行LogCat命令,该命令将其输出转储到存储在设备的SD卡中的文本文件中。

要在我的服务中运行LogCat命令,我使用了以下代码:

   Process p = Runtime.getRuntime().exec("logcat -v time -f /mnt/sdcard/log.txt &");

以上代码在后台运行,到目前为止,我已经实现了我的需求。

但是从设备上卸载应用程序后,上面的命令甚至正在运行。 SD卡中的log.txt文件不断增加。

我已查看“应用程序 - > ManageApplications - > RunningServices”,但我的服务没有运行。

请在卸载我的应用程序时帮助我停止后台进程。

这个问题很奇怪,但它正在发生。

这些症状消失了,我只重新启动了设备。

2 个答案:

答案 0 :(得分:3)

您正在启动一个新流程,因此它根本不依赖于您当前的流程。当您的应用程序被杀死时,它不会被杀死。我在这里只知道两个选项: 1)使用-d(我相信)运行logcat,它会在到达缓冲区末尾时退出。默认情况下,Logcat会一直运行,直到它关闭为止,如果您只想转储日志,则应使用-d。 2)如果你不想要转储,但希望它继续流式传输到文件,那么没有干净的方法来杀死它。我知道如何执行ps然后读取控制台缓冲区并解析它以查找logcat进程的pid然后使用Process.killProcess终止进程的唯一方法。

答案 1 :(得分:0)

您可以记住Runtime返回的进程,并在卸载应用程序时终止它。